任何人都无法告诉您,它
EXCEPT永远或永远不会超过同等产品
OUTER JOIN。无论您如何编写意图,优化器都会选择合适的执行计划。
就是说,这是我的指导方针:
使用
EXCEPT时 至少一个 下面的是真实的:
- 该查询更具可读性(这几乎总是正确的)。
- 性能得到改善。
并且以下 两个 都是正确的:
- 该查询会产生语义上相同的结果,您可以通过足够的回归测试(包括所有边缘情况)来证明这一点。
- 性能不会降低(同样,在所有边缘情况下,以及环境变化,例如清除缓冲池,更新统计信息,清除计划缓存以及重新启动服务)。
重要的是要注意,
EXCEPT随着等价查询
JOIN变得越来越复杂和/或您依赖部分列中的重复项而不是其他列中的重复项,编写等效查询可能是一个挑战。编写
NOTEXISTS等效的文档,但其可读性要比完成时
EXCEPT要琐碎得多-
通常会导致制定更好的计划(但请注意,我不会说
ALWAYS或
NEVER,除非是按照我的方式做)。
在这篇博客中,我演示了至少一个案例,该案例
EXCEPT的正确构造
LEFT OUTER JOIN和等效
NOTEXISTS变体的表现都优于该案例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)