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

Làm cách nào để buộc truy vấn con hoạt động cũng như bảng #temp?

Có một vài lý do có thể giải thích tại sao bạn thấy hành vi này. Một số cái phổ biến là

  1. Truy vấn con hoặc CTE có thể được đánh giá lại nhiều lần.
  2. Vật liệu hóa kết quả từng phần thành #temp bảng có thể buộc một thứ tự tham gia tối ưu hơn cho phần đó của kế hoạch bằng cách loại bỏ một số tùy chọn có thể có khỏi phương trình.
  3. Vật liệu hóa kết quả từng phần thành #temp bảng có thể cải thiện phần còn lại của kế hoạch bằng cách điều chỉnh các ước tính về bản số kém.

Phương pháp đáng tin cậy nhất chỉ đơn giản là sử dụng #temp bảng và tự hiện thực hóa nó.

Không đạt được điều đó liên quan đến điểm 1, hãy xem Cung cấp gợi ý để buộc thực hiện hóa trung gian các CTE hoặc bảng dẫn xuất . Việc sử dụng TOP(large_number) ... ORDER BY thường có thể khuyến khích kết quả được lưu trữ thay vì đánh giá lại nhiều lần.

Ngay cả khi điều đó hoạt động, tuy nhiên không có số liệu thống kê về ống.

Đối với điểm 2 và 3, bạn sẽ cần phân tích lý do tại sao bạn không đạt được kế hoạch mong muốn. Có thể viết lại truy vấn để sử dụng các vị từ có thể phân loại hoặc cập nhật số liệu thống kê có thể có được một kế hoạch tốt hơn. Nếu không, bạn có thể thử sử dụng gợi ý truy vấn để có được kế hoạch mong muốn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn sao lưu và khôi phục cơ sở dữ liệu dưới dạng bản sao trên cùng một máy chủ?

  2. SQL Server Thay đổi tên cơ sở dữ liệu

  3. Xóa các bản sao khỏi tập dữ liệu lớn (> 100Mio hàng)

  4. Truy vấn đệ quy SQL Server

  5. OPENROWSET với tệp Excel