2015-12-27 16 views
0

我有这样一个表:在WHERE子句中增加条件会提高搜索速度吗?

// mytable 
+----+-------+---------+ 
| id | name | code | 
+----+-------+---------+ 
| 1 | jack | 1  | 
| 2 | acton | 1  | 
| 3 | aiken | 1  | 
| 4 | peter | null | 
| 5 | ash | null | 
| 6 | fabia | 2  | 
| 7 | ubon | null | 
| 8 | taavi | null | 
| 9 | wade | 2  | 
| 10 | ian | 1  | 
+----+-------+---------+ 

我要选择这行的id是4。这里是我的查询:

select * from mytable where id = 4 

而且我知道,行codenull。现在我想知道,如果我加这个... and code = null会提高搜索速度吗?

+0

您提出的更改将返回零行。使用'is null'。桌上有哪些索引?假设一个唯一的id索引,这个额外的检查可能会使事情略微减慢。 –

+1

@Shafizadeh如果id是唯一的,并且代码被索引,则添加“...和code为null”不会有任何区别,只会使用id索引 – fthiella

回答

1

如果添加:

and code = null 

,那么你不会得到任何行返回,因为= null总是返回null。并且where会过滤掉其值不正确的行。

相反,你wnat:

and code is null 

据推测,id上有一个索引(所有的主键有一个索引)。如果是这样,SQL引擎在获取行后可能会再做一次比较,以确保code与条件匹配。鉴于所有其他获取数据的工作,这是非常非常微不足道的。包括附加条件很可能对性能没有明显的影响。

+0

我明白了。 tnx :-) +1 – Shafizadeh