tsv*_*nav 2 index sql-server where
我发现这篇文章谈到避免在 where 子句中使用 <> 运算符,因为优化器会忽略索引。
https://www.mssqltips.com/sqlservertutorial/3203/avoid-using-not-equal-in-where-clause/
这绝对是真的吗?
处理这个问题的最佳方法是什么?如何避免使用 <> ?
Mar*_*ith 12
一个<> X
谓语是可优化搜索。
SQL Server 可以将其转换为两个范围搜索(on< X
或> X
)。
除非索引覆盖查询,否则您可能看不到这一点。使用非覆盖索引和查找的查询的临界点通常非常低。(最多只有个位数百分比的选择性)。
因此,除非表的 99%确实具有值X
,<>
否则将为要选择的计划匹配太多行。
即使在这种情况下,您也可能应该考虑只包含 1% 不匹配行的过滤索引,X
而不是包含高度非选择性值的完整索引。
除非可能值的域是完全固定的并且非常小,否则您实际上无法选择使用<> X
或编写它IN(all,values,that,are,not_x)
- 您需要为所有可能的值选择具有正确语义的域。
归档时间: |
|
查看次数: |
672 次 |
最近记录: |