sql >> Databáze >  >> RDS >> Sqlserver

Provádí EXCEPT rychleji než JOIN, když jsou sloupce tabulky stejné

V žádném případě vám to nikdo nemůže říct EXCEPT bude vždy nebo nikdy překonávat ekvivalentní OUTER JOIN . Optimalizátor vybere vhodný plán provádění bez ohledu na to, jak napíšete svůj záměr.

To znamená, že zde je můj pokyn:

Použijte EXCEPT když alespoň jeden platí následující:

  1. Dotaz je čitelnější (to bude téměř vždy pravda).
  2. Výkon se zlepšil.

A OBA platí:

  1. Dotaz poskytuje sémanticky identické výsledky a můžete to prokázat dostatečným regresním testováním, včetně všech okrajových případů.
  2. Výkon není snížen (opět ve všech okrajových případech, stejně jako změny prostředí, jako je vymazání fondu vyrovnávacích pamětí, aktualizace statistik, vymazání mezipaměti plánu a restartování služby).

Je důležité si uvědomit, že napsat ekvivalent EXCEPT může být problém zadejte dotaz jako JOIN se stává složitější a/nebo spoléháte na duplikáty v části sloupců, ale ne v jiných. Zápis NOT EXISTS ekvivalentní, i když je o něco méně čitelný než EXCEPT by mělo být mnohem triviálnější – a často to povede k lepšímu plánu (ale mějte na paměti, že bych nikdy neřekl ALWAYS nebo NEVER , kromě toho, jak jsem to právě udělal).

V tomto blogovém příspěvku demonstruji alespoň jeden případ, kdy EXCEPT je překonán jak správně zkonstruovaným LEFT OUTER JOIN a samozřejmě ekvivalentem NOT EXISTS variace.



  1. Jak nainstalovat SQL Server na Mac s VirtualBoxem

  2. Jak zkontrolovat, zda hodnota DataReaderu není null?

  3. Chyba při aktualizaci připojení

  4. Získejte aktuální rok, aktuální měsíc a aktuální den v MySQL