索引介绍:
表中存在大量数据如果没有索引的时候,要寻找一条数据得进行全表扫描直到找到为上。而有索引的情况下利用B树(多数情况下)只需要查找一部分数据就行。
索引有两大优势:
其一检索快——索引相当于书本的目录,提高检索效率的同时降低数据库IO成本。
其二排序方便——用索引排序,降低数据排序成本和CPU消耗。
也有两大劣势:
其一占空间——索引也是一张表,表中保存主键与索引字段,并指向实体类记录,所以占空间。
其二更新慢——虽然提高了检索效率,但是进行DML的时候不仅要保存数据,还要保存更新了的索引列的字段,也就是数据表和索引表都得变动,这样会让DML操作速度降低。
索引大致分三大类:单值——一个索引只包含单个列,唯一——索引列的值必须唯一(主键约束和唯一约束就属于此类)并允许有空值,复合索引——一个索引包含多个列。
索引原理:
索引的设计原则:
1.查多量大——查询频率高且数据量较大。
2.最佳条件——索引字段就当从where子句条件中选择,如果有多组条件,选择最常用且过滤效果最好的。
3.唯一索引——使用唯一索引,区分度越高效率也越高。
4.控制数量——索引不是越多越好,索引越多维护代价也越高,会带来降低DML效率且占据空间的负面效果。
5.短索引——索引也占空间,所以索引字段长度尽量简短。
6.最左前缀——由多个字段组成的联合索引,相当创建了多个索引,使用中依情况使用最前面几个(最左边),不能跳过字段。
7.很少修改——做为索引的字段应当很少进行DML操作。
SQL优化流程:
先查看SQL执行频率
再定位低效SQL语句:
分析执行语句:
接下来通过对执行情况表的字段做演示说明
id字段:
select_type(查询类型)字段:
type(联接类型)字段:
extra字段:
性能工具profiling
trace分析优化器执行计划
索引的使用: