现在有张表 t_order,其中有一些字段,我给其中a,b,c[三个均为非主键]三个字段
增加了一个复合索引,顺序也是为a,b,c....
问题:以下哪种查询是用了索引的,因为跟我之前的理解冲突了,希望大神帮忙解答一下!!
1. where a = ''
2. where a = '' and b = ''
3. where a = '' and b='' and c =''
我一直认为这三个都是用了索引的,但是我用执行计划分析了一下,发现1是没有用到
索引的,那么是哪里出了问题呢?
我的上面的是对的,后来查看执行计划又有了!!!
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
正常情况下都会用到索引的,1没用到索引可能是因为where a=“”的时候满足条件的数据太多,mysql优化器会默认走主键的聚簇索引顺序查找全表查找数据,所以才导致你执行计划看到没有用到索引
我看有人说是如果全表扫描比索引快的话,会走全表扫描不走索引。