T-SQL不等于operator和Case语句

时间:2012-08-07 04:16:17

标签: sql-server performance tsql

假设我有一个T-SQL语句:

select * from MyTable
where Code != 'RandomCode'

我的任务是让这种声明表现得更快。在线书籍表示正面查询(=)比负面更快(!=,<>)。

因此,一个选项是将其变为CASE语句,例如

select * from MyTable
where 
   case when Code = 'RandomCode' then 0 
      else 1 end = 1

有没有人知道这是否可以比原来的T-SQL更快或更慢?

提前致谢。

1 个答案:

答案 0 :(得分:6)

您必须更具体地了解您对表格感兴趣的信息以及Code列的可能值。然后,您可以创建适当的索引来加速查询。

例如,如果Code列中的值只能是'RandomCode''OtherCode''YetAnotherCode'中的一个,则可以将查询重写为:

SELECT * FROM MyTable WHERE Code = 'OtherCode' OR Code = 'YetAnotherCode'

当然,您需要Code列上的索引。

如果您必须执行不等式查询,则可以将SELECT *更改为更窄的查询,例如:

SELECT Id, Name, Whatever FROM MyTable WHERE Code != 'RandomCode'

然后创建一个索引,如:

CREATE INDEX idx_Code ON MyTable(Code) INCLUDE (Id,Name,Whatever)

这可以通过用索引扫描替换表扫描来减少I / O.