所以,我一直认为在Extra列中看到“Using Where”是一件好事。然而,我正在为我的同事们计划一个关于解释EXPLAIN的午餐会,现在我不太确定了。MySQL文档在关于“Using Where”的注释中说道:
“使用WHERE子句来限制匹配下一张表或发送给客户端的行。除非您明确打算从表中获取或检查所有行,否则如果Extra值不是Using where并且表连接类型是ALL或index,则查询可能存在问题。即使您对WHERE子句的所有部分都使用索引,如果列可以为空,您也可能会看到Using where。”
这让我相信,即使我的WHERE子句只包含索引的一部分,如果列可以有NULL值,MySQL仍然会检查行。
这是真的吗?如果是,那么我应该更改列以不包括NULL吗?我会看到速度提升吗?
“使用WHERE子句来限制匹配下一张表或发送给客户端的行。除非您明确打算从表中获取或检查所有行,否则如果Extra值不是Using where并且表连接类型是ALL或index,则查询可能存在问题。即使您对WHERE子句的所有部分都使用索引,如果列可以为空,您也可能会看到Using where。”
这让我相信,即使我的WHERE子句只包含索引的一部分,如果列可以有NULL值,MySQL仍然会检查行。
这是真的吗?如果是,那么我应该更改列以不包括NULL吗?我会看到速度提升吗?