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

Thời gian chờ của truy vấn SQL Server tùy thuộc vào mệnh đề Where

Vấn đề bạn đang gặp phải (gần như chắc chắn) là do kế hoạch truy vấn được lưu trong bộ nhớ cache, phù hợp với một số phiên bản của tham số được truyền cho truy vấn, nhưng không phù hợp với những phiên bản khác (còn gọi là Parameter Sniffing).

Đây là một trường hợp phổ biến và thường trở nên tồi tệ hơn do thống kê lỗi thời và / hoặc chỉ mục bị phân mảnh kém.

Bước đầu tiên :đảm bảo rằng bạn đã xây dựng lại tất cả các chỉ mục của mình và thống kê trên các cột không được lập chỉ mục được cập nhật. (Ngoài ra, hãy đảm bảo rằng khách hàng của bạn có công việc duy trì chỉ mục được lên lịch thường xuyên)

exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go

Đây là tài liệu tham khảo chuẩn:Chậm trong ứng dụng, Nhanh trong SSMS?

Nếu sự cố vẫn tồn tại sau khi xây dựng lại chỉ mục và cập nhật thống kê, thì bạn có một số tùy chọn:

  1. Sử dụng SQL động (nhưng hãy đọc phần này trước:Lời nguyền và phước lành của SQL động)

  2. Sử dụng OPTIMIZE FOR

  3. Sử dụng WITH(RECOMPILE)




  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 tất cả Ràng buộc khóa ngoại trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 77

  2. Mệnh đề ORDER BY không hợp lệ trong các dạng xem, hàm nội tuyến, bảng dẫn xuất, truy vấn con và biểu thức bảng thông thường

  3. Làm cách nào để đặt chuỗi kết nối theo chương trình cho Entity-Framework Code-First?

  4. PARSE () so với TRY_PARSE () trong SQL Server:Sự khác biệt là gì?

  5. Đây là ba lý do tại sao bạn có thể thấy hoạt động cao điểm trong phiên bản SQL của bạn