聚簇索引和二级索引(也就是辅助索引)
主键(自增的效率最高,不是自增可能会导致不是顺序插入引起页分裂,影响插入速度)默认是聚簇索引,存储是叶子节点不仅存储主键的key还存储对应行的所有列的值
二级索引键直接存储索引键的值(所以数字类型加索引,索引就会小得多),值直接存储主键的key,所以如果用到二级索引且查的值不在覆盖索引的范围内,就会再次去查一次聚簇索引拿到值
索引的经验原则
选择度最高排最前原则,最左匹配原则,到范围位置原则(即涉及到范围的查询该列放最后,防止后面的列使用不到索引)
索引支持最左的前缀匹配
where与order by ,group by 联合使用
先后顺序为 where----group by ----order by,你既可以在group by和order by后面单独使用索引,也可以和where子句联合使用
如有 key(a,b,c)
where a=1 order by b 能用索引 where k=2 order by a,b 能用 where a=1 order by c 不能用
group by 同理是一样的
加索引的原则
索引不是越多越好,要注意删除冗余的索引如 (A, B) 和 A 就是冗余索引,删除A。而且索引本身构建需要时间,经常更改索引列的值,可能导致页分裂,产生很多页内碎片,需要执行optimize table 优化索引存储才行并且索引存储的是列的值,当是一个选择度不高且值的内容很长会浪费很大的空间而且生成的树近似于直链,查询效率不高。所以索引只推荐在那些中型大小的表里面使用,小型和大型都没有太大必要