关键字:查询、排序、分组、缺点
7.1、用于查询 where
聚簇索引是Mysql自动建立在主键上的索引,我们想要对某些列建立自己的索引,就需要建二级索引,一般会对多个列建立联合索引,对于二级联合索引在查询的时候,在以下情况下可以使用上索引:
例如我们对某个表的A、B、C列建立了联合索引,idx_A_B_C,我们称A为索引左边的列。
查询能用上索引的情况是:在每一个查询条件检索后,查询出来的数据在B+树叶子节点上,数据是连续的话,那么就可以使用该索引。
(1)精确匹配:where A=’a’ [and B=’b’] [and C=’c’],对于这样的搜索。当索引左边的列A进行匹配后,检索的结果在B+树叶子节点上,数据连续,所以可以使用索引,继续分析B、C同理。
注:这种全值匹配,where子句条件顺序不影响执行过程。
(2)左模糊搜索列前缀:where A like ‘a%’
注:如果需要右模糊匹配,可以将数据在表中逆向存储,然后使用左匹配。
(3)匹配范围值:where A > ‘a1’ and A < ‘a2’,同理。
7.2、用于排序 order by
由于B+树上的数据是经过排序好的数据,如果我们要按照某索引列的顺序进行排序,那么可以直接使用该索引来排序(前提是查询的列在索引列中,不需要进行回表操作,如果需要回表的话,mysql会计算成本决定是否使用索引)。
在内存或磁盘中对查出来的数据进行排序,称为文件排序(file sort)。使用索引排序可以避免文件排序,文件排序速度是非常慢的。
7.3、用于分组 group by
因为B+树上的数据是排序好的,也就是分组好的。那么可以直接使用B+树完成分组操作。
7.4、索引的缺点
建立索引对查询、排序、分组都有很大的帮助,但是索引有如下的缺点
(1)索引本身会占用大量的硬盘空间;
(2)在对数据进行增删改的时候,需要对索引的B+树进行维护,比较消耗时间。