Come resettare le statistiche dopo AGGIORNARE LE STATISTICHE ... CON ROWCOUNT


11

Per scopi di ottimizzazione e test delle query, è possibile assegnare manualmente un conteggio delle righe e un conteggio delle pagelle alle statistiche dell'indice di una tabella eseguendo UPDATE STATISTICS. Ma come ricalcolare / reimpostare le statistiche sui contenuti effettivi della tabella?

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

Una query fittizia:

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

... restituirà il seguente piano di query (la stima delle righe nella scansione dell'indice è di 1024 righe).

10.000 file

Esegui il UPDATE STATISTICScomando ..

UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;

... e il piano è simile a questo, ora con una stima di 10 milioni di righe:

10 milioni di file

Come reimpostare il conteggio delle righe sul contenuto effettivo della tabella senza utilizzare WITH ROWCOUNT?

Ho provato WITH FULLSCAN, WITH RESAMPLEe WITH SAMPLE n ROWS, ma il conteggio delle righe delle statistiche rimane di 10 milioni di righe. L'inserimento di una riga o addirittura l'eliminazione di tutte le righe non aggiorna le statistiche, poiché la modifica è troppo piccola.

Risposte:


15

Utilizzare DBCC UPDATEUSAGEcon l' COUNT_ROWSopzione.

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

Documentazione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.