Cara mengatur ulang statistik setelah STATISTIK PEMBARUAN… DENGAN ROWCOUNT


11

Untuk tujuan pencarian dan pengujian kueri, Anda dapat secara manual menetapkan jumlah baris dan jumlah halaman ke statistik indeks tabel dengan menjalankan UPDATE STATISTICS. Tetapi bagaimana Anda menghitung ulang / mereset statistik ke isi tabel yang sebenarnya?

--- 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;

Kueri dummy:

SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;

... akan mengembalikan paket kueri berikut (perkiraan baris dalam Pemindaian Indeks adalah 1024 baris).

10 000 baris

Jalankan UPDATE STATISTICSperintah ..

UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;

... dan rencananya terlihat seperti ini, sekarang dengan perkiraan 10 juta baris:

10 juta baris

Bagaimana cara mengatur ulang jumlah baris ke isi sebenarnya dari tabel tanpa menggunakan WITH ROWCOUNT?

Saya sudah mencoba WITH FULLSCAN, WITH RESAMPLEdan WITH SAMPLE n ROWS, tetapi statistik rowcount tetap 10 juta baris. Memasukkan baris atau bahkan menghapus semua baris tidak memperbarui statistik, karena perubahannya terlalu kecil.

Jawaban:


15

Gunakan DBCC UPDATEUSAGEdengan COUNT_ROWSopsi.

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

Dokumentasi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.