我有以下查询:
select * from [sales].[customers] where first_name <> 'Debra'
Run Code Online (Sandbox Code Playgroud)
我想让我的查询 SARGable 因为我有一个非集群索引first_name:
它已经是可交易的。
SQL Server 可以将其转换为两个范围搜索> 'Debra',< 'Debra'如果它认为它有益的话。
CREATE TABLE #Customers(
CustomerID INT PRIMARY KEY,
first_name VARCHAR(10) INDEX ix_first_name,
last_name VARCHAR(100)
)
SELECT first_name
FROM #Customers
where first_name <> 'Debra'
DROP TABLE #Customers
Run Code Online (Sandbox Code Playgroud)
除非你有一个带前导列的覆盖索引,first_name这不太可能是有益的,尽管可能只有一小部分表会被排除,如果 SQL Server 需要进行高比例的查找,它不会使用索引查找.