当前位置: 数据库>sqlserver
SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
来源: 互联网 发布时间:2014-10-12
本文导语: 代码如下:SET @SQL = 'SELECT * FROM Comment with(nolock) WHERE 1=1 And (@ProjectIds Is Null or ProjectId = @ProjectIds) And (@Scores is null or Score =@Scores)' 印象中记得,以前在做Oracle开发时,这种写法是会导致全表扫描的,用不上索引,不知道Sql...
代码如下:
SET @SQL = 'SELECT * FROM Comment with(nolock) WHERE 1=1
And (@ProjectIds Is Null or ProjectId = @ProjectIds)
And (@Scores is null or Score =@Scores)'
印象中记得,以前在做Oracle开发时,这种写法是会导致全表扫描的,用不上索引,不知道Sql Server里是否也是一样呢,于是做一个简单的测试
1、建立测试用的表结构和索引:
代码如下:
CREATE TABLE aaa(id int IDENTITY, NAME VARCHAR(12), age INT)
go
CREATE INDEX idx_age ON aaa (age)
GO
2、插入1万条测试数据:
代码如下:
DECLARE @i INT;
SET @i=0;
WHILE @i