MySQL索引介绍

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)满足索引的最左前缀

 

猜你喜欢

转载自www.cnblogs.com/saiQsai/p/8987503.html