Khi tôi xem xét các kế hoạch thực hiện, tôi thường so sánh "Số lượng hàng ước tính" với "Số lượng hàng thực tế", tìm kiếm sự khác biệt. Ví dụ, khi tôi di chuột qua mũi tên dưới cùng trong hình bên dưới, ước tính là 1 và thực tế là 200, vì vậy trong nháy mắt, nó dường như là một ước tính khủng khiếp.
Tuy nhiên, tôi đã tự hỏi liệu đây có thực sự là ước tính cho chỉ một lần thực hiện hay không. Khi tôi di chuột qua tìm kiếm để có thêm thông tin chi tiết, tôi thấy rằng có 200 vụ hành quyết và ước tính 199,98. Vì vậy, nếu linh cảm của tôi là chính xác, ước tính thực sự đã chết.
Bất cứ ai có thể xác nhận cho tôi nếu đây là trường hợp? Và nếu vậy, tôi có phải là người duy nhất nghĩ rằng điều này là vô cùng sai lệch (đặc biệt là khi di chuột qua các mũi tên)? Nếu nó giúp, đây là kịch bản để thiết lập và tái tạo kế hoạch trên:
-- Setup: Create 2 tables with 100K rows each.
CREATE TABLE T1(Id int NOT NULL PRIMARY KEY, X INT NOT NULL)
CREATE TABLE T2(Id int NOT NULL PRIMARY KEY)
CREATE INDEX Ix ON T1 (X, Id)
;WITH
Pass0 AS (SELECT 1 AS C UNION ALL SELECT 1), --2 rows
Pass1 AS (SELECT 1 AS C FROM Pass0 AS A, Pass0 AS B),--4 rows
Pass2 AS (SELECT 1 AS C FROM Pass1 AS A ,Pass1 AS B),--16 rows
Pass3 AS (SELECT 1 AS C FROM Pass2 AS A ,Pass2 AS B),--256 rows
Pass4 AS (SELECT 1 AS C FROM Pass3 AS A ,Pass3 AS B),--65536 rows
Pass5 AS (SELECT 1 AS C FROM Pass4 AS A ,Pass2 AS B),--1048576 rows
Tally AS (SELECT ROW_NUMBER() OVER (ORDER BY C) AS Number FROM Pass5)
INSERT INTO T1
SELECT Number, Number
FROM Tally
WHERE Number <= 100000
INSERT INTO T2
SELECT Id
FROM T1
--Now join them
SELECT *
FROM T1
JOIN T2 ON T2.Id = T1.Id
WHERE T1.X <= 200