To find all the changes between two databases, I am left joining the tables on the pk and using a date_modified field to choose the latest record. Will using EXCEPT increase performance since the tables have the same schema. I would like to rewrite it with an EXCEPT, but I’m not sure if the implementation for EXCEPT would out perform a JOIN in every case. Hopefully someone has a more technical explanation for when to use EXCEPT.
To find all the changes between two databases, I am left joining the tables
Share
There is no way anyone can tell you that
EXCEPTwill always or never out-perform an equivalentOUTER JOIN. The optimizer will choose an appropriate execution plan regardless of how you write your intent.That said, here is my guideline:
Use
EXCEPTwhen at least one of the following is true:And BOTH of the following are true:
It is important to note that it can be a challenge to write an equivalent
EXCEPTquery as theJOINbecomes more complex and/or you are relying on duplicates in part of the columns but not others. Writing aNOT EXISTSequivalent, while slightly less readable thanEXCEPTshould be far more trivial to accomplish – and will often lead to a better plan (but note that I would never sayALWAYSorNEVER, except in the way I just did).In this blog post I demonstrate at least one case where
EXCEPTis outperformed by both a properly constructedLEFT OUTER JOINand of course by an equivalentNOT EXISTSvariation.