2 winy lm winy_lm 于 2016.03.01 11:24 提问

关于sql复合索引没有生效的问题

现在有张表 t_order,其中有一些字段,我给其中a,b,c[三个均为非主键]三个字段
增加了一个复合索引,顺序也是为a,b,c....

问题:以下哪种查询是用了索引的,因为跟我之前的理解冲突了,希望大神帮忙解答一下!!
1. where a = ''
2. where a = '' and b = ''
3. where a = '' and b='' and c =''

我一直认为这三个都是用了索引的,但是我用执行计划分析了一下,发现1是没有用到
索引的,那么是哪里出了问题呢?

2个回答

winy_lm
winy_lm   2016.04.06 10:27
已采纳

我的上面的是对的,后来查看执行计划又有了!!!

qq_20039385
qq_20039385   2016.03.01 14:41

联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

qq_20039385
qq_20039385 回复winy_lm: 刚问过我同事,他说只有3用了索引,因为索引列和查询字段顺序要对应,和顺序有关,不知道对不对,坐等高手来解答
接近 2 年之前 回复
winy_lm
winy_lm 你的理解跟我之前的理解是一样的,但是现在的情况是单独以a去执行查询的时候执行计划是没显示通过索引的,你可以试一下,所以才会有了我上面的问题!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!