Cách đặt lại thống kê sau khi CẬP NHẬT THỐNG KÊ B WITHNG ROWCOUNT


11

Đố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).

10 000 hàng

Chạy UPDATE STATISTICSlệ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:

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 RESAMPLEWITH 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ỏ.

Câu trả lời:


15

Sử dụng DBCC UPDATEUSAGEvới COUNT_ROWStùy chọn.

DBCC UPDATEUSAGE 
(   { database_name | database_id | 0 } 
    [ , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } ] ] 
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ] 

Tài liệu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.