1、索引类型
1.1 B-Tree索引
使用B-Tree数据结构来存储数据,因此索引值是按顺序存储的,并且每个叶子节点到根节点的距离相同。B-Tree的高度是log(n)级别的,所以查找的复杂度是log(n)级别。
可以使用的场景:
(1)全值匹配
(2)匹配最左前缀:联合索引的最左边的几个索引列
(3)匹配列前缀:某个索引列的值的开头部分
(4)匹配范围值
(5)精确匹配某一列并范围匹配另外一列
限制使用场景:
(1)不是按照联合索引的最左列开始查找
(2)不能跳过索引中的列:比如联合索引有3列,如对1、3列查找,则只能使用列1的索引
(3)如果查询中有某个列的范围查询,则其右边所有列都无法使用索引
2、高性能索引
1.1 索引列要独立
索引列不能是表达式的一部分,或者是函数的参数
1.2 多列索引
当经常多几列做相交操作时,可以为这几个列建一个联合索引,而不是单独为每个列建索引
1.3 索引列的顺序
选择合适的索引列顺序,将选择性最高的列放在索引的最前面
1.4 聚簇索引
叶子节点上存储了数据行,一般在主键列上建聚簇索引,且一张表只能建一个聚簇索引。其他的不是聚簇索引的索引,在叶子节点上存放索引列以及主键值。因此,使用不是聚簇索引的索引查询时,会先找到主键值,然后再利用主键值即可使用聚簇索引获得整行数据。
非聚簇索引的叶子节点存放索引列的值以及指向相关索引列值的行。
1.5 覆盖索引
索引的叶子节点中已经包含要查询的字段。当索引被覆盖时,explain中的extra列显示using index
1.6 使用索引扫描做排序
因为通过索引获得的数据本来就是按照索引列有序排序的。所以当order by后面跟索引列时会免去排序步骤,加快速度。否则,在explain的extra列中出现Using filesort
限制条件:
(1)索引列的顺序和order by顺序完全一致,且order by后面的各列排序方向相同
(2)关联多张表时,order by引用字段全部是第一张表
(3)满足索引的最左前缀