Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kolejność wykonywania instrukcji SQL Server

Jest to znana „funkcja” SQL Server. Nigdy nie zakładaj, że klauzula WHERE jest wykonywana przed klauzulą ​​SELECT.

Zobacz:SQL Server powinien nie zgłaszaj nielogicznych błędów

Czasami są ku temu dobre powody. Rozważ połączenie dwóch stołów, gdzie A jest znacznie mniejsze niż B.

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

Jeśli sprawdzisz wygenerowany plan zapytania, słusznie lub niesłusznie, serwer SQL prześle strumieniowo dane z A jako wiodące wiersze do połączenia z B. Robiąc to, wie, że wystarczy pobrać col2 i function on col1 . Może przynieść col1 po prostu w celu późniejszego uruchomienia funkcji lub dla czegoś tak trywialnego jak CAST, SQL Server może równie dobrze przekształcić dane podczas procesu przesyłania strumieniowego.

Jedno jest pewne, ta strategia sprawia, że ​​SQL Server jest odrobinę szybszy w niektórych zapytaniach. Ale z czysto logicznej perspektywy nazwałbym to błędem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy jest jakaś różnica między DECIMAL i NUMERIC w SQL Server?

  2. Wydajne zapytanie do podzielenia rozdzielanej kolumny na oddzielną tabelę

  3. Jaka jest alternatywa dla kursorów dla pętli SQL?

  4. SQL Server 2016:Utwórz bazę danych

  5. Scalanie z zamówieniem reklamowym