7

所以我一直认为在 Extra 栏中看到“Using Where”是一件好事。但是,我正计划为我的同事准备一份棕色袋子午餐,以解释解释,现在我不太确定。MySQL 文档在关于“Using Where”的注释中这么说:

WHERE 子句用于限制与下一个表匹配或发送到客户端的行。除非您特别打算从表中获取或检查所有行,否则如果 Extra 值不是 Using where 并且表连接类型是 ALL 或索引,则您的查询可能有问题。即使您对 WHERE 子句的所有部分都使用索引,您也可能会看到使用 where 如果列可以为 NULL。

这让我相信即使我的 WHERE 子句只包含索引的一部分,如果列可以具有 NULL 值,MySQL 仍然会检查行。

真的吗?如果是这样,如果不需要,我应该将列更改为不包含 NULL 吗?我会看到速度提升吗?

4

1 回答 1

6

可空列确实有开销,因为额外需要检查空条件。如果一列不必为空,或者您的要求不允许为空,那么一定要创建该列not null

至于指标,取决于指标的构建。如果索引是用定义的(a,b,c)并且您b,c在 where 子句中使用,则不能使用该索引,因为a它不在播放中。

于 2011-08-09T22:00:57.533 回答