请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教老师关于联合索引的问题

我在一张表上 a b 两列建立联合索引

select * from test where b=0;
这句sql查看执行计划type是index,根据联合索引的特征,这句应该是没有走到索引的

select * from test where a=0 or b=0;
select * from test where a>0 or b=0;
select * from test where a>0 and b=0;

这三句sql查看执行结果type都是index,是不是说明这几种情况都是没有走到索引的?如果不是怎么从执行计划中看出哪些字段走了索引,哪些字段没有走索引呢?
谢谢老师!

正在回答 回答被采纳积分+3

1回答

sqlercn 2020-07-10 10:37:11

 可以使用explain 命令看一下key列的输出就可以看出SQL是否使用的索引了。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕仔8930017 #1
    老师你好,我在a b c d 4列上建了联合索引名为test_key,
    使用select * from test  where b>0 and c=0;
    使用explain命令看key列返回是test_key,key_len是16,还是走到了索引,我有点懵逼了,希望老师指点下,谢谢老师!
    回复 有任何疑惑可以回复我~ 2020-07-10 13:30:21
  • sqlercn 回复 提问者 慕仔8930017 #2
    这是因为高版本的MySQL的优化器具有一定的索引下推优化,所以也可以利用到这样的联合索引。
    回复 有任何疑惑可以回复我~ 2020-07-10 21:37:54
  • 提问者 慕仔8930017 回复 sqlercn #3
    原本表中只有a b c d 这4个字段,发现怎么查都能走到索引。我又添加了三个没有索引的列,发现就遵循最左匹配原则了。难道是因为表中每个字段都在联合索引中的时候就没有最左匹配原则了吗?
    回复 有任何疑惑可以回复我~ 2020-07-10 22:13:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信