mysql联合索引的使用规则有哪些,mysql联合索引的使用规则包括

mysql联合索引的使用规则有哪些,mysql联合索引的使用规则包括,mysql联合索引的使用规则

本文主要介绍mysql联合索引的具体使用,结合实例代码有一定的参考价值。感兴趣的朋友可以参考一下。

联合指数也称为复合指数。对于复合索引:Mysql从左到右使用索引中的字段。一个查询只能使用部分索引,但只能使用最左边的部分。例如,索引是关键索引(a,b,c)。可以支持A | A、B | A、B、C三种组合进行搜索,但不支持B、C进行搜索。当最左边的字段是常量引用时,索引非常有效。

从一个有趣的话题开始分析:

假设一个表有一个联合索引(c1,c2,c3,c4)。以下选项的哪些字段使用索引:

a其中c1=x,c2=x,c4x和c3=x

b其中c1=x,c2=x,c4=x,按c3排序

c其中c1=x和c4=x由c3、c2分组

d其中c1=?而c5=?按c2、c3排序

e其中c1=?而c2=?而c5=?按c2、c3排序

我们开始吧:

首先创建表格:

创建表t(

c1 CHAR(1)不为空,

c2 CHAR(1)不为空,

c3 CHAR(1)不为空,

c4 CHAR(1)不为空,

c5字符(1)不为空

)引擎myisam CHARSET UTF8

从c1到C5有五个字段。特别是,字段类型都是固定长度的char(1)类型,并且不为空。字符集是utf8(与用于计算索引的字节数相关)

创建索引:

更改表t添加索引c1234(c1,c2,c3,C4);

插入两条数据:插入t值( 1 , 1 , 1 , 1 ,( 2 , 2 , 2 )

使用MySql Explain开始分析问题的结果:

选项a:

从结果中可以看出,c1,c2,c3,c4都使用这个指标,但是我们稍微改变了A的结果:

c2条件消除后:

根据最左索引原理,c2字段不使用索引,c2之后的所有字段都不能使用索引。在下图中,我们比较了最左边的索引原理:

上图结果显示,直接使用c3是全表查询,不能使用索引。因此,在c3字段中使用索引的前提是c1和c2字段都使用索引。

即索引最左边的原则(左前缀原则)。

选项b:

key_len的长度表示c1和c2字段使用这个索引,多余的显示不使用临时表进行排序,表示排序是按索引进行的,但不计入key_len的值中,不起到连接c4的作用,表示索引从c3断开。

实际上排序是直接使用联合索引完成的,也就是使用c1234联合索引,c1-c2,c2-c3,c3-c4是有序的,所以索引实际上是用于排序的,而c3字段没有使用索引。(写这一段总觉得有点别扭。不知道理解对不对,需要进一步研究。)

选项c:

使用group by一般教师创建临时文件,然后进行排序,但是当字段顺序为c2和c3时,不使用临时表进行排序,而是使用索引进行排序;当分组依据字段为c3和c2时,索引不用于分组和排序,因为它与索引字段的顺序不一致。

由key_len的长度决定,只索引一个字段c1。

d选项:

排序依据类似于分组依据。当字段顺序与索引一致时,将使用索引排序。当字段的顺序与索引不一致时,不使用索引。

由key_len的长度决定,只索引一个字段c1。

e选项:

其实选项E的结果分析在上面的ABCD结果中已经分析过了,这里只有c1和c2字段使用这个指标。

综上所述,以上问题的答案:

答:所有四个字段都使用这个索引。

B:c1、c2字段使用此索引。

C:c1字段使用此索引。

D:c1字段使用此索引。

E:c1、c2字段使用此索引。

总结:

索引的最左原则(左前缀原则),如(C1、C2、C3、C4)的联合索引.CN),其中根据索引建立的字段顺序使用条件(这并不意味着and条件必须按顺序书写)。如果中间列没有条件,或者使用like将导致后面的列无法使用索引。

索引还可以用于分组和排序。分组要先排序,求平均值。因此,在分组和排序时,如果字段顺序能够遵循索引的字段顺序,就可以利用索引的有序特性。

关于mysql联邦索引规则的这篇文章到此为止。有关mysql联邦索引的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

mysql联合索引的使用规则有哪些,mysql联合索引的使用规则包括