Đối với mục đích kiểm tra và điều chỉnh truy vấn, bạn có thể chỉ định thủ công một hàng và số trang cho thống kê chỉ mục của bảng bằng cách chạy UPDATE STATISTICS
. Nhưng làm thế nào để bạn tính toán lại / đặt lại các số liệu thống kê cho nội dung thực tế của bảng?
--- Create a table..
CREATE TABLE dbo.StatTest (
i int NOT NULL,
CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i)
);
GO
--- .. and give it a thousand-or-so rows:
DECLARE @i int=1;
INSERT INTO dbo.StatTest (i) VALUES (@i);
WHILE (@i<1000) BEGIN;
INSERT INTO dbo.StatTest (i) SELECT @i+i FROM dbo.StatTest;
SET @i=@i*2;
END;
Một truy vấn giả:
SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;
... sẽ trả về gói truy vấn sau (ước tính hàng trong Quét chỉ mục là 1024 hàng).
Chạy UPDATE STATISTICS
lệnh ..
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... và kế hoạch trông như thế này, hiện có ước tính 10 triệu hàng:
Làm cách nào để đặt lại hàng đếm về nội dung thực tế của bảng mà không sử dụng WITH ROWCOUNT
?
Tôi đã thử WITH FULLSCAN
, WITH RESAMPLE
và WITH SAMPLE n ROWS
, nhưng số liệu thống kê rowcount vẫn 10 triệu dòng. Chèn một hàng hoặc thậm chí xóa tất cả các hàng không cập nhật số liệu thống kê, vì thay đổi quá nhỏ.