我在许多关于 Sql Server 的文章中看到,当我们编写查询时,我们应该避免在查询中使用 NOT 和 LIKE 运算符,因为索引没有应用于它。
例如。
SELECT [CityId]
,[CityName]
,[StateId]
FROM [LIMS].[dbo].[City]
WHERE CityId NOT IN(1, 2)
我执行了上面的查询,发现索引被用来过滤记录。 以下是执行计划,清楚地显示了 Clustured Index 查找。这显然违背了我以前的想法和阅读。
我之前的理解是否错误?
最佳答案
索引不适用于 LIKE 和 NOT 运算符只是一个经验法则。 SQL Server(或任何有能力的 RDBMS)将在大多数情况下使用最好的算法。因此,如果您可以手动查找索引,那么 SQL Server 也可以。
在您提供的特定示例中,尚不清楚查找是否比扫描更有效,因为无论如何都会返回大多数记录。因此,我不会深入了解该特定的执行计划。
底线:学习并了解数据库系统如何在内部组织数据和索引,这样您就不必依赖经验法则。
关于sql - 索引不适用于 Sql Server 中的 LIKE 和 NOT 运算符,这是一个神话吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571835/