假设我有一个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更快或更慢?
提前致谢。
答案 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.