【MySQL】29 索引
MySQL是一个关系型的数据库
使用标准的SQL数据格语言格式
支持大型数据库,处理千万级别的记录数据
允许多系统运行,支持多种编程语言连接
最重要的一点是MySQL允许定制,采用GPL协议,允许修改MySQL源码来实现定制SQL系统
在Linux安装MySQL:【省略】
MyISAM & InnoDB
MyISAM
不支持主外键,不支持事务,仅有表锁,不适合高并发操作
缓存只缓存索引,不支持缓存真实数据
表空间小,注重的是数据库管理系统的性能问题
InnoDB
支持主外键,支持事务管理,使用行锁控制,适合高并发操作
缓存索引和真实数据,对内存要求较高,而且内存大小对性能的影响是决定性的
表空间占用相比MyISAM较大,关注的重点是对事物的管理控制
SQL查询性能下降的原因:
- SQL语句写的不够优雅 - 索引失效 - 关联查询关联表过多【需求所迫】 - 服务器调优和各个参数设置(缓冲,线程数)
首先是对数据的排序整理,在检索的时候效率更快。
索引 Index
索引分为了两种,第一种是单值索引,第二种是复合索引
单值索引的创建,即给某一个字段创建索引
CREATE [UNIQUE | FULLTEXT | SPATAL] INDEX 索引名称 ON 表名(字段名[索引长度]);
可选参数的说明:
1、UNIQUE 唯一索引
2、FULLTEXT 全文索引
3、SPATAL 空间索引
索引名称的规范:
idx_表名_字段名
复合索引,就是对一个字段以上的多字段同时创建索引
create index 索引名称 on 表名(字段1,字段2,字段3)
复合索引的名称规范:
idx_表名_字段名1字段名2字段名3
【按照小驼峰方式命名】
查看索引:
SHOW INDEX FROM 表名称
显示的参数信息:
1、table 表格名称 2、non_unique 索引是否唯一,1不是,0是 3、key_name 索引名称 4、seq_in_index 该列在索引中的顺序位置,单索引值为1,复合索引按定义的顺序返回顺序值 5、column_name 定义索引的列名 6、sub_part 索引长度 7、null 该列是否能为空 8、index_type 索引类型
索引删除:
DROP INDEX 表的名称.索引名称
常见的Join查询:
SQL语法顺序
SELECT DISTINCT 要查询的字段,表达式,就是查询列表 FROM 查询列表的来源表, 多表查询的关联条件 WHERE 首要的筛选条件 GROUP BY 对上面查询的结果再进字段的分组 HAVING 对分组的字段进行筛选条件 ORDER BY 然后进行字段排序 LIMIT 对以上查询的结果,分页查询
SQL执行顺序:
关于数据库管理系统,按照机器运行SQL的顺序:
- 1、检索数据库查看FROM子句是选择了哪些数据表 - 2、多表关联,查看关联条件的构成 - 3、检查是否带有WHERE子句的筛选条件 - 4、检查是否需要GROUP BY分组查询数据 - 5、检查是否需要HAVING对分组后的数据二次筛选条件 - 6、回到最开始的SELECT子句的查询列表,把结果返回到这些要求的字段中 - 7、DISTINCT 子句 对查询结果去除重复 - 8、ORDER BY 子句 进行升序降序处理 - 9、LIMIT 子句 进行分页处理
7种连接方式:
- 左外右 + 外连接 - 全外连接【笛卡尔积】 - 内连接