深入了解MySQL中的组合索引,看看与单列索引的区别

文 / @WordPress主题

深入了解MySQL中的组合索引,看看与单列索引的区别

MySQL中的索引对于查询速度的提升有着重要的作用,而单列索引和组合索引则是索引中的两个重要概念。单列索引是对一列数据建立索引,而组合索引则是对多个列的数据建立索引。在使用上,它们之间有着一些区别,本文将从如下几个方面进行探讨:什么是组合索引、单列索引陷阱、组合索引陷阱、联合索引的使用场景。

什么是组合索引

组合索引是指在MySQL中,对多个列的数据建立的索引,又被称作联合索引。例如,建立一个索引为key_index(a,b,c),可以支持a|a,b|a,b,c三种组合进行查找,但是不支持b,c进行查找。在使用的时候,a,c组合也可以用,但实际上只用到了a的索引。在创建组合索引的时候,可以使用以下两种方式:

普通的组合索引:

CREATE INDEX index_name ON table_name(column1,column2,...)

要求唯一的索引,相比于上一种,多出了【unique】关键字:

CREATE UNIQUE INDEX index_name ON table_name(column1,column2,...)

单列索引陷阱

在MySQL中,如果同时建立了多个索引,如果where中使用and进行查询,执行计划会使用到第一个条件上的索引,后续的索引会被忽略掉。例如,我们创建了两个索引,在where中使用and进行查询是,从执行计划里看只使用到了第一个条件上的索引,后续的索引直接被忽略掉。

组合索引陷阱

在建立组合索引时,列的顺序非常重要,“从左原则”就是从左到右建立组合索引,当where条件中的查询不满足组合索引的前缀时,MySQL就会放弃它并选择另一个索引。例如,建立组合索引a,b,c,在条件查询中使用b,a,c,MySQL会自动处理条件顺序变为a,b,c,再使用定义好的组合索引。查询条件是b,a,MySQL调整条件顺序为a,b,再走组合索引,查询条件是b,c,由于没有使用a作为条件列,MySQL没有使用组合索引。

联合索引的使用场景

联合索引比单列索引更适合在where条件会经常出现,并且当前表的数量比较大的场景。在where条件中使用and而非or的时候,联合索引比较适合。因为索引占用一定的磁盘空间,也就说明有一定的开销,如果多个单列索引比较多,那么所占资源的浪费也比较多,联合索引相当于对多个列建索引,并且只建一次,and条件下非常适合。

总之,单列索引和组合索引在MySQL中有着不同的使用场景和注意事项,在建立索引时一定要考虑到自己的查询场景和数据量,选取合适的索引方式能够大大优化查询的速度和效率。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。