首页 > 解决方案 > 如何为我的 first_name 列设置不等式 SARGable?

问题描述

我有以下查询:

 select * from [sales].[customers] where first_name <> 'Debra' 

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

在此处输入图像描述

标签: sql-servertsql

解决方案


它已经是sargable了。

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

在此处输入图像描述

除非您有一个带有前导列的覆盖索引,否则first_name这不太可能是有益的,尽管可能只有一小部分表将被排除在外,并且如果 SQL Server 预计它需要进行高比例的查找,则它不会使用索引查找.


推荐阅读