为什么额外的是“使用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发布于 2019-06-16 11:33:01
这仅仅意味着WHERE子句中的条件将用于限制查询返回的行。如果在EXPLAIN额外语句中没有"Using where“,那么查询将不会限制行。
这就是手册上的意思:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-extra-information
WHERE子句用于限制要与下一个表匹配或发送到客户端的行。除非您特别打算从表中提取或检查所有行,否则如果附加值没有使用where并且表连接类型为all或index,则查询中可能会出现错误。
我可以发誓,我看到过在解释报告中缺少"Using where“的情况,即使查询确实使用了索引并限制了要返回的行。
我不得不得出结论,对于所有类型的行限制,“使用where”的报告并不可靠。
其他人已经注意到“使用where”的含义令人困惑或不一致:https://bugs.mysql.com/bug.php?id=30733
https://stackoverflow.com/questions/56615824
复制相似问题