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

Tại sao truy vấn con (không tương quan) này lại gây ra sự cố như vậy?

Theo kinh nghiệm của tôi rằng, các truy vấn của bạn càng phức tạp, trình tối ưu hóa SQL càng ít có khả năng tạo các kế hoạch khéo léo. Ở đây bạn có 16 liên kết, một số hoặc hầu hết là liên kết ngoài, bạn có ít nhất một truy vấn con ... ném đủ chỉ mục, cấp số, chế độ xem, áp dụng bên ngoài và ai biết được điều gì khác và không ai, thậm chí không phải Microsoft kỹ sư *, có thể tìm ra các quy trình sẽ tạo ra các kế hoạch tối ưu nhất một cách thống nhất và thường xuyên.

Những gì bạn đã mô tả, tôi đã trải qua rất nhiều lần - hãy thay đổi một điều đơn giản trong một truy vấn lộn xộn và mọi thứ đều nhanh hơn (hoặc, nghiến răng, chậm hơn). Tôi không có phương pháp nào để xác định khi nào phức tạp quá phức tạp, đó là cảm giác hơn bất cứ thứ gì khác. Quy tắc chung của tôi là, nếu nó trông quá dài hoặc quá phức tạp, hãy đơn giản hóa nơi bạn có thể - chẳng hạn như giá trị lồng nhau đơn lẻ đã chọn trước của bạn hoặc chia nhỏ một phần của truy vấn hơn là luôn luôn chạy nhanh với một tập hợp kết quả nhỏ và chạy nó trước tiên và lưu trữ kết quả trong bảng tạm thời.

(* Xin lưu ý rằng đây là trò đùa nhẹ nhàng)



  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 tốt nhất để thực hiện logic câu lệnh chữ hoa chữ thường lồng nhau trong SQL Server

  2. Nhập tệp txt vào SQL Server với mệnh đề where

  3. Có thể lấy địa chỉ mac bằng quy trình được lưu trữ không?

  4. Cập nhật số lượng lớn hàng - SQL Server 2005

  5. Trường dữ liệu SQL tạm thời