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

Điều gì làm cho một câu lệnh SQL có thể phân loại được?

Điều phổ biến nhất sẽ tạo nên một truy vấn không phân chia được là bao gồm một trường bên trong một hàm trong mệnh đề where:

SELECT ... FROM ...
WHERE Year(myDate) = 2008

Trình tối ưu hóa SQL không thể sử dụng một chỉ mục trên myDate, ngay cả khi một chỉ mục tồn tại. Theo nghĩa đen, nó sẽ phải đánh giá chức năng này cho mọi hàng của bảng. Tốt hơn nhiều để sử dụng:

WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'

Một số ví dụ khác:

Bad: Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))

Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'

Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate()) 


  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âu lệnh SQL CASE:Nó là gì và những cách tốt nhất để sử dụng nó là gì?

  2. Chuyển đổi ‘datetime2’ thành ‘time’ trong SQL Server (Ví dụ T-SQL)

  3. Làm cách nào để sử dụng ROW_NUMBER ()?

  4. Chọn một cột nếu cột khác rỗng

  5. Nhận nhiều giá trị trong con trỏ máy chủ SQL