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

Ordine di esecuzione delle istruzioni di SQL Server

Questa è una "funzione" nota di SQL Server. Non dare mai per scontato che la clausola WHERE venga eseguita prima della clausola SELECT.

Vedere:SQL Server dovrebbe non sollevare errori illogici

In realtà ci sono buone ragioni per farlo a volte. Prendi in considerazione la possibilità di unire due tabelle, con A molto più piccolo di B.

select CAST(A.col1 as int), A.col2, B.col3
from A join B ...
where ... isnumeric(A.col1) = 1

Se si ispeziona il piano di query generato, a torto oa ragione, il server SQL trasmetterà in streaming i dati da A come righe iniziali da unire a B. Mentre lo fa, sa che deve solo estrarre col2 e function on col1 . Potrebbe portare col1 solo per eseguire la funzione in un secondo momento o per qualcosa di banale come CAST, SQL Server potrebbe anche trasformare i dati durante il processo di streaming.

Una cosa è certa, questa strategia rende SQL Server un po' più veloce in determinate query. Ma da una prospettiva puramente logica, lo definirei un bug.