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

Những yếu tố nào có thể gây ra việc biên dịch thủ tục đã lưu trữ trên SQL Server?

Có một số cách để đảm bảo biên dịch lại quy trình được lưu trữ:

  • sử dụng WITH RECOMPILE ,
  • làm cho thủ tục được lưu trữ trở nên động (nghĩ exec() )
  • đánh dấu proc để biên dịch lại bằng sp_recompile .
  • thay đổi lược đồ mà một kế hoạch truy vấn đã lưu trong bộ nhớ đệm dựa vào
  • đang gọi DBCC FREEPROCCACHE
  • Ở cấp độ truy vấn, một câu lệnh riêng lẻ trong một chương trình có thể được biên dịch lại với gợi ý truy vấn RECOMPILE (SQL 2008).

Các yếu tố trong biên dịch

Bên cạnh các yếu tố khó được liệt kê ở trên, nguyên nhân nào dẫn đến việc biên dịch lại thủ tục được lưu trữ? Chà, rất nhiều thứ. Một số trong số này đan xen với danh sách trên, nhưng tôi muốn trình bày lại chúng b / c nó có thể không rõ ràng.

  • Chèn hoặc xóa nhiều dữ liệu (mật độ dữ liệu trong chỉ mục và bảng thường kiểm soát các kế hoạch truy vấn)
  • Xây dựng lại chỉ mục (thay đổi đối với các đối tượng cơ bản)
  • Tạo / xóa bảng tạm thời (một lần nữa, các thay đổi cơ bản của DML).
  • kế hoạch truy vấn đã cũ (nghĩ rằng không được sử dụng gần đây và sql muốn dọn dẹp việc sử dụng bộ nhớ)

Đây không phải là một danh sách đầy đủ. Trình tối ưu hóa truy vấn phát triển và bất ngờ cho dù bạn đã sử dụng SQL Server bao lâu. Nhưng đây là một số tài nguyên có thể được sử dụng:

NHƯNG CHỜ-ANH HƠN NỮA!

Như đã nói, giả định trong câu hỏi của bạn là các bản biên dịch lại luôn không tốt cho hiệu suất. Trên thực tế, việc biên dịch lại thường là tốt.

Vậy khi nào bạn muốn nó được biên dịch lại? Hãy xem một ví dụ về proc tìm kiếm theo họ. Các thủ tục được lưu trữ thực hiện ' đánh giá tham số 'đó là một phước lành (nếu nó hiệu quả với bạn) và một lời nguyền (nếu nó có hiệu quả với bạn). Đầu tiên vượt qua tìm kiếm ai đó trên Zebr% cho zerbrowski. Chỉ mục tên họ nhận ra điều này rất cụ thể và sẽ trả về, giả sử, 3 hàng từ một triệu - vì vậy một kế hoạch thực thi được xây dựng. Với proc được biên dịch để có kết quả hàng thấp, tìm kiếm tiếp theo là cho S% . Chà, S là tên thông dụng nhất của bạn và khớp với 93.543 hàng trong số 1 triệu.



  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ỗi kết nối RODBC odbcDriverConnect ()

  2. đệ quy cte với các chức năng xếp hạng

  3. SSRS lựa chọn kết quả dựa trên danh sách được phân tách bằng dấu phẩy

  4. Cách trả về đầu ra của thủ tục đã lưu trữ thành một biến trong máy chủ sql

  5. Tham số hóa một mệnh đề SQL IN