为什么多余的是“使用where;使用索引”而不是“使用索引”

时间:2019-06-16 03:24:33

标签: mysql query-optimization

为什么多余的是“使用where;使用索引”而不是“使用索引”。

       CREATE TABLE `pre_count` (                
         `count_id` varchar(38) NOT NULL,        
         `cam_id` varchar(38) NOT NULL,       
         `count_time` datetime NOT NULL,         
         PRIMARY KEY (`cam_id`,`count_time`)  
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8      

解释select count_time from pre_count where cam_id = '56849645645645646'

结果:

1   SIMPLE  pre_count   ref PRIMARY PRIMARY 116 const   1   Using where; Using index

1 个答案:

答案 0 :(得分:1)

这只是意味着您的WHERE子句中的条件将用于限制查询返回的行。如果您在EXPLAIN Extra中没有有“在何处使用”,则查询将不会限制行。

这就是手册中的含义:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-extra-information

  

WHERE子句用于限制要与下一个表匹配或发送给客户端的行。除非您特别打算从表中获取或检查所有行,否则如果Extra值不是Using where并且表联接类型为 ALL index <,则查询中可能会出问题。 / em>。

我可以发誓,即使查询确实使用了索引并限制了行的返回,我的EXPLAIN报表中仍然缺少“使用位置”的情况。

我被迫得出结论,并非针对所有类型的行限制都可靠地报告“在哪里使用”。

其他人已经注意到“在哪里使用”的含义容易混淆或不一致:https://bugs.mysql.com/bug.php?id=30733