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

LEFT JOIN Significativamente più veloce di INNER JOIN

L'unione a sinistra sembra essere più veloce perché SQL è costretto a eseguire prima la selezione più piccola e quindi a unirsi a questo insieme più piccolo di record. Per qualche motivo l'ottimizzatore non vuole farlo in modo naturale.

3 modi per forzare l'esecuzione dei join nell'ordine corretto:

  1. Seleziona il primo sottoinsieme di dati in una tabella temporanea (o variabile di tabella), quindi unisciti a essa
  2. Utilizza i left join (e ricorda che questo potrebbe restituire dati diversi perché è un left join non un inner join)
  3. utilizza la parola chiave FORCE ORDER. Tieni presente che se le dimensioni delle tabelle o gli schemi cambiano, il piano di query potrebbe non essere corretto (vedi https://dba.stackexchange.com/questions/45388/forcing-join-order )