Stu*_*ler 13 index sql-server optimization
根据 Microsoft 的数据库开发书70-433:Microsoft SQL Server 2008 数据库开发:
前导通配符和NOT逻辑都不允许查询优化器使用索引来优化搜索。为了获得最佳性能,您应该避免使用NOT关键字和前导通配符。
所以我认为那是NOT IN,NOT EXISTS等等
现在关于这个SO问题,我认为@GBN 选择的解决方案会违反上面给出的声明。
显然,事实并非如此。
所以我的问题是:为什么?
gbn*_*gbn 22
NOT IN (SELECT ...)并且NOT EXISTS (SELECT .. WHERE correlation..)是“反半连接”。也就是说,公认的基于集合的操作
WHERE NOT (MyColumn = 1) 是需要查看所有行的过滤器
有关更多信息,请参阅:
编辑:为了完整性
LEFT JOIN 通常表现更差。见http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server
同一个站点指出,在 MySQL 中,NOT EXISTS 不像其他 RDBMS 那样优化,LEFT JOIN 更好
在 SQL Server 中,我从经验中知道 LEFT JOIN 不像 NOT EXISTS 那样运行。您还经常需要 DISTINCT 来获得与另一个处理步骤相同的结果。
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |