Mik*_*rov 7 mysql database-optimization database-indexes
所以我一直认为在Extra栏中看到"Using Where"是一件好事.然而,我正计划为我的同事准备一个棕色的包午餐来解释EXPLAIN,现在我不太确定.MySQL文档在关于"使用位置"的说明中说明了这一点:
WHERE子句用于限制哪些行与下一个表匹配或发送到客户端.除非您特意打算从表中获取或检查所有行,否则如果Extra值不是Using where并且表连接类型为ALL或index,则查询可能会出错.即使您正在为WHERE子句的所有部分使用索引,您也可以看到如果列可以为NULL则使用where.
这使我相信即使我的WHERE子句只包含索引的一部分,如果列可以具有NULL值,MySQL仍将检查行.
真的吗?如果是这样,如果我不需要它,我应该将列更改为不包括NULL吗?我会看到提速吗?
可空列确实有开销,因为需要检查空条件.如果列不必为null,或者您的要求不允许为null,那么绝对要生成列not null.
至于索引,取决于索引构造.如果索引是在您的where子句中定义的(a,b,c)并且您正在使用b,c,则此索引不能用作a不在播放中.