Mysql中复合索引使用规则有哪些

这篇文章主要介绍了关系型数据库中复合索引使用规则有哪些 , 具有一定借鉴价值 , 感兴趣的朋友可以参考下 , 希望大家阅读完这篇文章之后大有收获 , 下面让小编带着大家一起了解一下 。联合索引验证:从左向右发挥作用索引:(c1 , c2 , c3 , c4):找到c1的基础上 , 可以找到c2 , 找到c3的基础上 , 可以找到补体第四成份缺乏a:select *来自t , 其中c1=x , c2=x , c3=x , C4=x;b:select *来自t , 其中c1=x , c2=x , c4x , C3=x;用到了c1 c2 c3 c4c:select * from t其中c1=x和c2=x和c4=x按c3排序;C1C2用到了索引查找 , C3只发挥了排序的作用 , C3不用(c3:订购发挥作用了 , 排序不用作了) , C4的索引就不用 , 4块木板 , 中间断了 , 后面也就用不上了d:select * from t其中c1=x和c4=x被c3、c2分组;e:select * from t其中c1=x和c5=x按c2、c3排序;来自t的f:select *其中c1=x和c2=x和c5=?按c2、c3排序;创建表t (c1炭(10)、c2炭(10)、c3炭(10)、C4炭(10)、C5炭(10));插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );插入t值( a1  ,  a2  ,  a3  ,  a4  ,  a5  , ( b1  ,  b2  ,  b3  ,  b4  ,  b5 );在t(c1 , c2 , c3 , c4)上创建索引idx _ t _ c1234在t(c1)上创建索引idx _ t _ c1在t(c2)上创建索引idx _ t _ c2在t(c3)上创建索引idx _ t _ c3在t(c4)上创建索引idx _ t _ c4更改表t删除索引idx _ t _ c1234解释从t中选择*其中c1= a1 和c2= b2 和c3= a3 和c4= a + -+ + +
| id | select_type | table | type | possible_keys | key| key_len | ref| rows | Extra|
+ -+ -+ -+ + + -+ + -+ + +
|1 | SIMPLE| t| ref| idx_t_c1234| idx_t_c1234 | 44| const,const,const,const |1 | Using where; Using index |
+ -+ -+ -+ + + -+ + -+ + +
key_len: 44 // CHAR(10)*4 + 4 * NULL:说明全用到了3个索引 , 且都是等值查询的索引:c1,c2,c3,c4
删除了复合索引后:发现只用到c1索引 , c2,c3,c4索引全没用上
explain select * from t where c1= a1 and c2= b2 and c3= a3and c4= a
+ -+ -+ -+ + -+ -+ + -+ + +
| id | select_type | table | type | possible_keys| key| key_len | ref| rows | Extra|
+ -+ -+ -+ + -+ -+ + -+ + +
|1 | SIMPLE| t| ref| idx_t_c1,idx_t_c2,idx_t_c3,idx_t_c4 | idx_t_c1 | 11| const |1 | Using index condition; Using where |
+ -+ -+ -+ + -+ -+ + -+ + +
删除了复合索引后:发现只使用了一个索引c4 , 没有用c1索引 , 这是因为优化器发现c4= a1 一条也没找到 , 用这个索引查询是最快的

推荐阅读