Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ред на изпълнение на оператори на SQL Server

Това е известна „функция“ на SQL Server. Никога не приемайте, че клаузата WHERE се изпълнява преди клаузата SELECT.

Вижте:SQL Server трябва не предизвиква нелогични грешки

Всъщност понякога има добри причини да го правите. Помислете за свързване на две таблици, като A е много по-малка от B.

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

Ако инспектирате генерирания план на заявката, правилно или погрешно, SQL сървърът ще предава поточно данните от A като водещи редове, които да се съединят срещу B. Докато прави това, той знае, че трябва само да изтегли col2 и function on col1 . Може да доведе до col1 само за да изпълни функцията по-късно или за нещо толкова тривиално като CAST, SQL Server може също така да трансформира данните по време на процеса на поточно предаване.

Едно нещо е сигурно, тази стратегия наистина прави SQL Server малко по-бърз в определени заявки. Но от чисто логическа гледна точка бих го нарекъл грешка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане на всички редове от конкретен дял в SQL Server (T-SQL)

  2. Получавайте на всеки час за период от време

  3. Как мога да свържа данните си с календар, за да получа запис за всеки ден от началото до края в SQL Server

  4. Как да пуснете колона с ограничение в SQL Server

  5. Как да разделя низ на колони за изглед?