MySQL优化:EXPLAIN“Extra”列包含“Using Where”

时间:2011-08-09 21:50:11

标签: mysql database-optimization database-indexes

所以我一直认为在Extra栏中看到“使用Where”是一件好事。然而,我正计划为我的同事准备一个棕色的包午餐来解释EXPLAIN,现在我不太确定。 MySQL文档在关于“使用位置”的说明中说明了这一点:

  

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

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

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

1 个答案:

答案 0 :(得分:6)

Nullable列确实有开销,因为需要检查null条件。如果列不必为null,或者您的要求不允许为null,那么绝对要使列not null

对于索引,取决于索引构造。如果索引是使用(a,b,c)定义的,并且您在where子句中使用b,c,则无法使用此索引,因为a尚未使用。