sql >> Database >  >> RDS >> Sqlserver

SQL-prestaties op LEFT OUTER JOIN vs NOT EXISTS

De link van Joe is een goed startpunt. Quassnoi dekt dit ook.

Over het algemeen als uw velden correct zijn geïndexeerd, OF als u verwacht meer records uit te filteren (d.w.z. veel rijen hebben EXIST in de subquery) NOT EXISTS zal beter presteren.

EXISTS en NOT EXISTS beide kortsluiting - zodra een record aan de criteria voldoet, wordt het opgenomen of eruit gefilterd en gaat de optimizer door naar het volgende record.

LEFT JOIN zal lid worden van ALL RECORDS ongeacht of ze overeenkomen of niet, filter vervolgens alle niet-overeenkomende records. Als je tafels groot zijn en/of je hebt meerdere JOIN criteria, kan dit zeer arbeidsintensief zijn.

Ik probeer normaal gesproken NOT EXISTS . te gebruiken en EXISTS waar mogelijk. Voor SQL Server, IN en NOT IN zijn semantisch equivalent en kunnen gemakkelijker te schrijven zijn. Dit zijn enkele van de enige operators die u in SQL Server aantreft die gegarandeerd kortsluiting veroorzaken.



  1. Een subtekenreeks extraheren uit een tekenreeks in Oracle/SQLite

  2. UTC_TIMESTAMP() Voorbeelden – MySQL

  3. Kan geen resultaten van opgeslagen procedure retourneren met Python-cursor

  4. Oracle Big Data SQL