Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thứ tự thực thi câu lệnh SQL Server

Đây là một "tính năng" đã biết của SQL Server. Đừng bao giờ cho rằng mệnh đề WHERE thực thi trước mệnh đề CHỌN.

Xem: Máy chủ SQL nên không nêu ra các lỗi phi logic

Thực sự có những lý do chính đáng để làm điều đó đôi khi. Hãy xem xét việc kết hợp hai bảng, với A nhỏ hơn nhiều so với B.

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

Nếu bạn kiểm tra kế hoạch truy vấn được tạo, đúng hay sai, máy chủ SQL sẽ truyền dữ liệu từ A dưới dạng các hàng hàng đầu để kết hợp với B. Trong khi làm điều đó, nó biết rằng nó chỉ cần kéo col2 và hàm function on col1 . Nó có thể mang lại col1 chỉ để chạy chức năng sau này hoặc đối với một thứ gì đó nhỏ nhặt như CAST, SQL Server cũng có thể chuyển đổi dữ liệu trong quá trình phát trực tuyến.

Một điều chắc chắn là chiến lược này làm cho SQL Server nhanh hơn một chút trong các truy vấn nhất định. Nhưng trên góc độ logic thuần túy, tôi sẽ gọi nó là một lỗi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách vô hiệu hóa tất cả các ràng buộc về CHECK &khóa ngoại trong cơ sở dữ liệu trong SQL Server (Ví dụ T-SQL)

  2. Loại trừ một cột bằng cách sử dụng SELECT * [ngoại trừ cộtA] FROM tableA?

  3. Khôi phục nhiều tệp .bak SQL Server

  4. Cách thêm HOẶC Thả cột từ bảng đã bật CDC mà không làm mất dữ liệu trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server

  5. Tại sao các hàm có giá trị vô hướng của SQL Server hoạt động chậm hơn?