T-SQL不等于operator和Case语句

Mik*_*ere 3 t-sql sql-server performance

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

select * from MyTable
where Code != 'RandomCode'
Run Code Online (Sandbox Code Playgroud)

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

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

select * from MyTable
where 
   case when Code = 'RandomCode' then 0 
      else 1 end = 1
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

Tod*_* Li 6

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

例如,如果在值Code列只能是一个'RandomCode','OtherCode','YetAnotherCode',您可以重新编写查询如下:

SELECT * FROM MyTable WHERE Code = 'OtherCode' OR Code = 'YetAnotherCode'
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT Id, Name, Whatever FROM MyTable WHERE Code != 'RandomCode'
Run Code Online (Sandbox Code Playgroud)

然后创建一个索引,如:

CREATE INDEX idx_Code ON MyTable(Code) INCLUDE (Id,Name,Whatever)
Run Code Online (Sandbox Code Playgroud)

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