3

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

select * from MyTable
where Code != 'RandomCode'

我的任务是让这种 where 语句执行得更快。Books Online 说肯定查询 (=) 比否定查询 (!= , <>) 快。

因此,一种选择是将其变为 CASE 语句,例如

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

有谁知道这是否会比原来的 T-SQL 更快或更慢?

提前致谢。

4

1 回答 1

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。

于 2012-08-07T04:31:50.663 回答