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).
Esegui il UPDATE STATISTICS
comando ..
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... e il piano è simile a questo, ora con una stima di 10 milioni di righe:
Come reimpostare il conteggio delle righe sul contenuto effettivo della tabella senza utilizzare WITH ROWCOUNT
?
Ho provato WITH FULLSCAN
, WITH RESAMPLE
e 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.