在文献中,我读到在 WHERE 子句中使用 OR 条件或运算符会生成一个语句non-sargable
。我不确定为什么或如何这是真的。任何帮助,将不胜感激。
权威优化书籍作者给出了答案SQL Server 查询性能调优, https://rads.stackoverflow.com/amzn/click/com/1430267437格兰特·弗里奇.所以事情是这样的:
“OR 语句现在比以前优化得多。但是如果你想一想,如果我有一个索引并且我想匹配等于 A 或 Z 的值,引擎必须进行多次比较,而不仅仅是简单地进行比较一。可控制条件都会导致直接的点查找或范围查找。因此 = A 将遍历一棵树并从该值的索引中检索一行或一组行。但是如果它是 A 或 R ,它无法检索范围,它必须执行其他类型的工作。有时您会看到这些通过 JOIN 操作作为两次查找完成。这很好。但其他时候您会看到其他过滤运算符或扫描。所以,它是不可监视的。” (再次强调,功劳归作者所有)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)