sql – 当表列相同时,EXCEPT的执行速度比JOIN快

前端之家收集整理的这篇文章主要介绍了sql – 当表列相同时,EXCEPT的执行速度比JOIN快前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要查找两个数据库之间的所有更改,我将继续加入pk上的表并使用date_modified字段选择最新记录.由于表具有相同的模式,因此使用EXCEPT会提高性能.我想用EXCEPT重写它,但我不确定EXCEPT的实现是否会在每种情况下执行JOIN.希望有人对何时使用EXCEPT有更多的技术解释.

解决方法

任何人都无法告诉你,EXCEPT将永远或永远不会超过等效的OUTER JOIN.无论您如何编写意图,优化程序都将选择适当的执行计划.

那就是说,这是我的指导方针:

如果满足以下条件之一,请使用EXCEPT:

>查询更具可读性(这几乎总是如此).
>性能得到改善.

并且以下两者都是真的:

>查询产生语义相同的结果,您可以通过充分的回归测试来证明这一点,包括所有边缘情况.
>性能不会降低(同样,在所有边缘情况下,以及环境更改,如清除缓冲池,更新统计信息,清除计划缓存和重新启动服务).

值得注意的是,编写等效的EXCEPT查询可能是一个挑战,因为JOIN变得更加复杂和/或您依赖于部分列中的重复项而不是其他列.写一个NOT EXISTS等价物,虽然比EXCEPT稍微不那么易读但应该更容易实现 – 而且往往会导致一个更好的计划(但请注意,我永远不会总是说,或者永远不会,除了我刚刚做的那样).

In this blog post I demonstrate at least one case where EXCEPT is outperformed by both a properly constructed LEFT OUTER JOIN and of course by an equivalent NOT EXISTS variation.

猜你在找的MsSQL相关文章