Truy vấn 2 sử dụng một biến.
Tại thời điểm lô được biên dịch, SQL Server không biết giá trị của biến vì vậy chỉ rơi trở lại heuristics rất giống với OPTIMIZE FOR (UNKNOWN)
Đối với >
nó sẽ giả định rằng 30% số hàng sẽ kết thúc khớp (hoặc 3000 hàng trong dữ liệu mẫu của bạn). Điều này có thể được nhìn thấy trong hình ảnh kế hoạch thực hiện như dưới đây. Con số này cao hơn đáng kể so với 12 hàng (0,12%) là điểm tới hạn
cho truy vấn này trong việc nó sử dụng quét chỉ mục theo nhóm hay tìm kiếm chỉ mục không phân cụm và tìm kiếm khóa.
Bạn sẽ cần sử dụng OPTION (RECOMPILE)
để làm cho nó tính đến giá trị biến thực tế như được hiển thị trong kế hoạch thứ ba bên dưới.
Tập lệnh
CREATE TABLE #Sale
(
SaleId INT IDENTITY(1, 1)
CONSTRAINT PK_Sale PRIMARY KEY,
Test1 VARCHAR(10) NULL,
RowVersion rowversion NOT NULL
CONSTRAINT UQ_Sale_RowVersion UNIQUE
)
/*A better way of populating the table!*/
INSERT INTO #Sale (Test1)
SELECT TOP 10000 NULL
FROM master..spt_values v1, master..spt_values v2
GO
SELECT *
FROM #Sale
WHERE RowVersion > 0x000000000001C310-- Query #1
DECLARE @LastVersion rowversion = 0x000000000001C310
SELECT *
FROM #Sale
WHERE RowVersion > @LastVersion-- Query #2
SELECT *
FROM #Sale
WHERE RowVersion > @LastVersion
OPTION (RECOMPILE)-- Query #3
DROP TABLE #Sale