sql组合索引怎样使用?怎样命中?

一、联合索引的使用

本文中联合索引的定义为(MySQL):

ALTER TABLE table_name ADD INDEX (col1,col2,col3);

二、联合索引的本质

当创建(col1,col2,col3)联合索引时,相当于创建了(col)单列索引,(clo1,clo2)联合索引以及(col1,col2,col3)联合索引想要索引生效,只能使用col1和col1,col2和col1,col2,col3三种组合;当然,col1,col3组合也可以,但实际上只用到了col1的索引,col3并没有用到!

三、示例

联合索引相当于一个按照姓氏——名字的一个电话簿,只能先确定姓氏才可以命中索引,下列可以正确命中联合索引的语句( = 和IN直接的字段都可以乱序,MySQL的查询优化器可以优化成索引识别的形式)

使用到索引的情况如下:

col_a = "some value"

col_a = "some value" and col_b = "some value"

col_a = "some value" and col_c = "some value"

col_a = "some value" and col_b = "some value" and col_c = "some value"

col_a = "some value" and col_c = "some value" and col_b = "some value"

col_b = "some value" and col_a = "some value" and col_c = "some value"

col_b = "some value" and col_c = "some value" and col_a = "some value"

col_c = "some value" and col_a = "some value" and col_b = "some value"

col_c = "some value" and col_b = "some value" and col_a = "some value"
未使用索引的情况

col_b = "some value"

col_c = "some value"

col_b = "some value" and col_c = "some value"

col_c = "some value" and col_b = "some value"
总结,组合索引从最左开始组合,只要包含第一列的查询都会用到该组合索引

四、SQL中联合索引和普通索引区别
区别:

联合索引中列的顺序非常重要,从左原则。a,ab,ba,abc。

单个索引:一个一个起作用,也就是说有三个单个索引,哪个条件查询在前哪个起作用,其他不起作用。

结论:

一般来说,列表搜索需要多个列查询,此时就可以使用联合索引,都是and的关系。

什么时候需要创建索引:

1、where条件会经常出现的,并且当前表的数量比较大。

2、where条件中是用and而非or的时候。

3、联合索引比单个索引更适合,因为索引占用一定磁盘空间,也就说明有一定的开销,如果多个单个索引比较多,那么多资源的浪费也比较多,联合索引相当于对多个列建索引,并且只建一次,and条件下非常适合。

posted @ 2023-05-09 09:37  好奇成传奇  阅读(304)  评论(0编辑  收藏  举报