如何建设公司的网站,成都网站建设众成联邦,在线做漫画网站,网站建设公司推荐q479185700顶上1. 前言偶然看到一个技术群#xff0c;对一道关于联合索引的讨论。面试题如下#xff1a;a_b_c_index 三列复合索引 a 1 and b100 and c5 这个查询 会用到索引的那几部分#xff1f;复制代码先说下个人经过本人查询多方资料得到的结论#xff0c; 只会用到 a 和 b部分(…1. 前言偶然看到一个技术群对一道关于联合索引的讨论。面试题如下a_b_c_index 三列复合索引 a 1 and b100 and c5 这个查询 会用到索引的那几部分复制代码先说下个人经过本人查询多方资料得到的结论 只会用到 a 和 b部分(这里和群里小伙伴的讨论结果一致如果有疑问可以后续探讨)。2. 验证要验证这个需要观察explain结果中 key、key_len。key 代表用到的索引。key_len 代表索引使用的字节数当索引的类型为int且默认值可以为null的时候用到索引则key_len为4。接下来是表结构CREATE TABLE test (id int unsigned NOT NULL AUTO_INCREMENT,a int unsigned NOT NULL DEFAULT 0,b int unsigned NOT NULL DEFAULT 0,c int unsigned NOT NULL,asda varchar(45) DEFAULT NULL,PRIMARY KEY (id),KEY a_b_c_index (a,b,c)) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;复制代码分别执行下面的sql。explain SELECT * FROM test.test where a2 and b12 and c12;复制代码根据key_len和key两个字段发现该sql用到了索引的全部部分。explain SELECT * FROM test.test where a2 and b12 and c12;复制代码其中key_len结果是8说明只用到了索引的两个部分但无法确认是abc中的哪些用到了索引。explain SELECT * FROM test.test where a2 and b12;复制代码其中key_len结果是8说明a和b都用到了索引。explain SELECT * FROM test.test where a2 and c12;复制代码其中key_len结果是4发现其中只有一个字段用到了索引。explain SELECT * FROM test.test where c12;复制代码这里没用到索引。根据以上的结果可以得到那个面试题的结论。只会用到 a 和 b部分用到了索引。3. 总结对于联合索引最左原则的总结如下1.联合索引的最左侧列要在查询语句中才能用到联合索引。2.查询语句中存在最左侧连续的字段且不能有范围查询的联合索引部分会生效。3.最左原则在遇到范围查询后之后往右的字段索引不生效。