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

Tại sao truy vấn được tham số hóa tạo ra kế hoạch truy vấn chậm hơn rất nhiều so với truy vấn không được tham số hóa

Có vẻ như người lập kế hoạch truy vấn đã đưa ra quyết định trong truy vấn nghĩa đen dựa trên thông tin mà nó đã có. Nó sẽ có số liệu thống kê mà nó có thể truy vấn một cách hiệu quả dựa trên sự phổ biến của dữ liệu được cung cấp theo nghĩa cụ thể của bạn.

Truy vấn được tham số hóa đã chọn truy vấn mà nó tin là công bằng nhất cho tất cả dữ liệu trong bảng của bạn, mà bạn sẽ nhận thấy là nhiều vòng lặp lồng nhau (performance =bad).

Có lẽ bạn có thể thử và chạy các công cụ tối ưu hóa cơ sở dữ liệu trên cơ sở dữ liệu của mình để xem liệu một số chỉ mục có thể giúp bạn ở đây không?

Cụ thể trong truy vấn của bạn, hãy thử điều này:

declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Nhưng tôi sẽ cảnh giác khi làm điều này mà không chắc chắn rằng dữ liệu trong truy vấn này sẽ không thay đổi và truy vấn của bạn trong gói này LUÔN LUÔN hiệu quả hơ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. Sử dụng sp_help_schedule trong SQL Server

  2. Chuyển đổi ‘datetime2’ thành ‘datetimeoffset’ trong SQL Server (Ví dụ T-SQL)

  3. SQL Server:Cơ sở dữ liệu bị kẹt ở trạng thái Khôi phục

  4. Cột được tính toán trong Mã EF Đầu tiên

  5. Phải khai báo biến vô hướng @Id?