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

OPTION (RECOMPILE) luôn nhanh hơn; Tại sao?

Đôi khi sử dụng OPTION(RECOMPILE) có ý nghĩa. Theo kinh nghiệm của tôi, lần duy nhất đây là một lựa chọn khả thi là khi bạn đang sử dụng SQL động. Trước khi bạn khám phá xem điều này có hợp lý trong tình huống của bạn hay không, tôi khuyên bạn nên xây dựng lại số liệu thống kê của mình. Điều này có thể được thực hiện bằng cách chạy như sau:

EXEC sp_updatestats

Và sau đó tạo lại kế hoạch thực hiện của bạn. Điều này sẽ đảm bảo rằng khi kế hoạch thực thi của bạn được tạo, nó sẽ sử dụng thông tin mới nhất.

Thêm OPTION(RECOMPILE) xây dựng lại kế hoạch thực thi mỗi khi truy vấn của bạn thực thi. Tôi chưa bao giờ nghe thấy điều đó được mô tả là creates a new lookup strategy nhưng có thể chúng ta đang sử dụng các thuật ngữ khác nhau cho cùng một thứ.

Khi một thủ tục được lưu trữ được tạo (Tôi nghi ngờ bạn đang gọi sql ad-hoc từ .NET nhưng nếu bạn đang sử dụng truy vấn được tham số hóa thì điều này sẽ trở thành một lệnh gọi proc được lưu trữ) SQL Server cố gắng xác định kế hoạch thực thi hiệu quả nhất cho truy vấn này dựa trên dữ liệu trong cơ sở dữ liệu của bạn và các tham số được truyền vào (đánh giá tham số), sau đó lưu vào bộ nhớ cache của kế hoạch này. Điều này có nghĩa là nếu bạn tạo truy vấn trong đó có 10 bản ghi trong cơ sở dữ liệu của mình và sau đó thực thi nó khi có 100.000.000 bản ghi thì kế hoạch thực thi đã lưu trong bộ nhớ cache có thể không còn hiệu quả nhất nữa.

Tóm lại - tôi không thấy lý do gì mà OPTION(RECOMPILE) sẽ là một lợi ích ở đây. Tôi nghi ngờ bạn chỉ cần cập nhật số liệu thống kê và kế hoạch thực hiện của mình. Xây dựng lại số liệu thống kê có thể là một phần thiết yếu của công việc DBA tùy thuộc vào tình huống của bạn. Nếu bạn vẫn gặp sự cố sau khi cập nhật số liệu thống kê của mình, tôi khuyên bạn nên đăng cả hai kế hoạch thực thi.

Và để trả lời câu hỏi của bạn - vâng, tôi sẽ nói rằng rất bất thường nếu lựa chọn tốt nhất của bạn là biên dịch lại kế hoạch thực thi mỗi khi bạn thực hiện truy vấ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. Truy vấn đệ quy trong SQL Server

  2. Tôi có thể sử dụng câu lệnh CASE trong điều kiện JOIN không?

  3. xác định bộ ký tự của một bảng / cơ sở dữ liệu?

  4. SQL Server Chèn hàng loạt tệp CSV với dấu ngoặc kép không nhất quán

  5. Máy chủ SQL tương đương với GROUP_CONCAT ()