在文献中,我已经读过在WHERE子句中使用OR条件或运算符来生成语句non-sargable.我不确定为什么或如何这是真的.任何帮助,将不胜感激.
答案由权威的优化书籍《SQL Server查询性能调优》的作者 Grant Fritchey提供。所以就这样:
“ OR语句现在比以前更加优化。但是,如果您考虑一下,如果我有一个索引并且想要匹配等于A或Z的值,那么引擎必须进行多次比较,而不仅仅是简单的一个可激情况都会导致直接查找点或范围查找。因此= A将遍历一棵树并从该值的索引中检索一行或一组行,但是如果是A或R ,它无法检索范围,它必须执行其他类型的工作,有时您会通过JOIN操作将它们视为两次查找完成,这很好,但有时您会看到其他过滤器运算符或扫描。因此,这是不可改变的。” (再次归功于作者)