如何使我的 first_name 列的不等式变为 SARGable?

moh*_*iri -1 t-sql sql-server

我有以下查询:

 select * from [sales].[customers] where first_name <> 'Debra' 
Run Code Online (Sandbox Code Playgroud)

我想让我的查询 SARGable 因为我有一个非集群索引first_name

在此处输入图片说明

Mar*_*ith 5

它已经是可交易的。

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 需要进行高比例的查找,它不会使用索引查找.