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更快或更慢?
提前致谢.
您必须更具体地了解您对表中感兴趣的信息以及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.