sql >> Database >  >> RDS >> Sqlserver

Wordt BEHALVE sneller uitgevoerd dan een JOIN wanneer de tabelkolommen hetzelfde zijn?

Niemand kan je dat vertellen EXCEPT zal altijd of nooit beter presteren dan een gelijkwaardige OUTER JOIN . De optimizer kiest een geschikt uitvoeringsplan, ongeacht hoe u uw intentie schrijft.

Dat gezegd hebbende, hier is mijn richtlijn:

Gebruik EXCEPT wanneer minstens één van het volgende is waar:

  1. De zoekopdracht is beter leesbaar (dit zal bijna altijd waar zijn).
  2. Prestaties zijn verbeterd.

En BEIDE van de volgende zijn waar:

  1. De zoekopdracht levert semantisch identieke resultaten op en u kunt dit aantonen door middel van voldoende regressietests, inclusief alle randgevallen.
  2. De prestaties zijn niet verslechterd (nogmaals, in alle edge-gevallen, evenals veranderingen in de omgeving, zoals het wissen van de bufferpool, het bijwerken van statistieken, het wissen van de plancache en het opnieuw starten van de service).

Het is belangrijk op te merken dat het een uitdaging kan zijn om een ​​equivalent EXCEPT . te schrijven query als de JOIN wordt complexer en/of u vertrouwt op duplicaten in een deel van de kolommen, maar niet op andere. Schrijven van een NOT EXISTS equivalent, hoewel iets minder leesbaar dan EXCEPT zou veel trivialer moeten zijn om te bereiken - en zal vaak leiden tot een beter plan (maar merk op dat ik nooit zou zeggen ALWAYS of NEVER , behalve op de manier waarop ik dat net deed).

In deze blogpost demonstreer ik ten minste één geval waarin EXCEPT wordt overtroffen door zowel een goed geconstrueerde LEFT OUTER JOIN en natuurlijk door een equivalent NOT EXISTS variatie.



  1. Fix Error 1064 (42000) bij gebruik van de MINUS-operator in MariaDB

  2. ID's van meerdere rijen invoegen in psycopg2

  3. Heroku Postgres:Te veel verbindingen. Hoe vernietig ik deze verbindingen?

  4. Hoe de huidige instelling voor null-uitvoer in PostgreSQL (psql) te tonen