sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-prestanda på LEFT OUTER JOIN vs NOT EXISTS

Joes länk är en bra utgångspunkt. Quassnoi täcker detta också.

I allmänhet om dina fält är korrekt indexerade, ELLER om du förväntar dig att filtrera bort fler poster (dvs. har många rader EXIST i underfrågan) NOT EXISTS kommer att prestera bättre.

EXIST och NOT EXISTS både kortslutning - så snart en post matchar kriterierna inkluderas den eller filtreras den bort och optimeraren går vidare till nästa post.

LEFT JOIN kommer att gå med i ALLA REKORD oavsett om de matchar eller inte, filtrera sedan bort alla icke-matchande poster. Om dina bord är stora och/eller du har flera JOIN kriterier kan detta vara mycket mycket resurskrävande.

Jag försöker normalt använda NOT EXISTS och EXIST där det är möjligt. För SQL Server, IN och NOT IN är semantiskt likvärdiga och kan vara lättare att skriva. Dessa är bland de enda operatörerna du hittar i SQL Server som garanterat kortsluter.



  1. När DRY-principen inte gäller:BITWISE-operationer i SQL Server

  2. Hur man skapar en tabell i SQL – Postgres och MySQL Exempelfråga

  3. Hur tar man bort en unik begränsning i SQL?

  4. SET-operatorer i SQL