Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Un INNER JOIN può offrire prestazioni migliori di EXISTS

In generale, INNER JOIN e EXISTS sono cose diverse.

Il primo restituisce duplicati e colonne da entrambe le tabelle, il secondo restituisce un record e, essendo un predicato, restituisce record da una sola tabella.

Se esegui un inner join su un UNIQUE colonna, mostrano le stesse prestazioni.

Se esegui un inner join su un recordset con DISTINCT applicato (per eliminare i duplicati), EXISTS di solito è più veloce.

IN e EXISTS le clausole (con una correlazione equijoin) di solito utilizzano uno dei numerosi SEMI JOIN algoritmi che di solito sono più efficienti di un DISTINCT su uno dei tavoli.

Vedi questo articolo nel mio blog:

  • IN vs. JOIN vs. EXISTS