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

Rækkefølgen for udførelse af SQL Server-sætninger

Dette er en kendt "funktion" i SQL Server. Antag aldrig, at WHERE-sætningen udføres før SELECT-sætningen.

Se:SQL-serveren bør ikke rejse ulogiske fejl

Der er faktisk gode grunde til at gøre det nogle gange. Overvej at samle to tabeller, hvor A er meget mindre end B.

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

Hvis du inspicerer den genererede forespørgselsplan, med rette eller forkerte, vil SQL-serveren streame dataene fra A som de førende rækker for at slutte sig til B. Mens den gør det, ved den, at den kun behøver at trække col2 og function on col1 . Det kunne bringe col1 gennem bare for at køre funktionen senere, eller for noget så trivielt som CAST, kan SQL Server lige så godt transformere dataene under streamingprocessen.

En ting er sikkert, denne strategi gør SQL Server en smule hurtigere i visse forespørgsler. Men ud fra et rent logisk perspektiv vil jeg kalde det en fejl.



  1. Tjek om PHP er blevet kompileret --with-mysql

  2. Hvordan indlæser jeg en sql.gz-fil til min database? (importerer)

  3. Hvordan kan jeg vise hele tiden mellem 2 forskellige tidsparametre

  4. Indsættelse af mm/dd/åååå formatdatoer i MySQL