View a markdown version of this page

CREATE STATISTICS - Amazon Aurora DSQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CREATE STATISTICS

Sintassi supportata

CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] ON ( expression ) FROM table_name CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] [ ( statistics_kind [, ... ] ) ] ON { column_name | ( expression ) }, { column_name | ( expression ) } [, ...] FROM table_name

Description

CREATE STATISTICScreerà un nuovo oggetto statistico esteso che traccia i dati relativi alla tabella specificata. L'oggetto statistico verrà creato nel database corrente e sarà di proprietà dell'utente che emette il comando.

Il CREATE STATISTICS comando ha due forme base. Il primo modulo consente di raccogliere statistiche univariate per una singola espressione, offrendo vantaggi simili a quelli di un indice di espressione senza il sovraccarico della manutenzione dell'indice. Questo modulo non consente di specificare il tipo di statistica, poiché i vari tipi di statistiche si riferiscono solo alle statistiche multivariate. La seconda forma del comando consente di raccogliere statistiche multivariate su and/or espressioni a più colonne, specificando facoltativamente quali tipi di statistiche includere. Questo modulo inoltre genererà automaticamente la raccolta di statistiche univariate su tutte le espressioni incluse nell'elenco.

Se viene fornito un nome di schema (ad esempioCREATE STATISTICS myschema.mystat ...), l'oggetto statistico viene creato nello schema specificato. Altrimenti viene creato nello schema corrente. Se fornito, il nome dell'oggetto statistico deve essere distinto dal nome di qualsiasi altro oggetto statistico nello stesso schema.

Parameters

IF NOT EXISTS

Non generate un errore se esiste già un oggetto statistico con lo stesso nome. In questo caso viene emesso un avviso. Nota che qui viene considerato solo il nome dell'oggetto statistico, non i dettagli della sua definizione. Il nome delle statistiche è obbligatorio quando IF NOT EXISTS è specificato.

statistics_name

Il nome (facoltativamente qualificato dallo schema) dell'oggetto statistico da creare. Se il nome viene omesso, Aurora DSQL sceglie un nome adatto in base al nome della tabella principale e alle espressioni dei nomi delle colonne definite. and/or

statistics_kind

Un tipo di statistica multivariata da calcolare in questo oggetto statistico. I tipi attualmente supportati sonondistinct, che abilita n statistiche distinte, che abilita le statistiche sulle dipendenze funzionali e mcv che abilita gli elenchi di valori più comuni. dependencies Se questa clausola viene omessa, tutti i tipi di statistiche supportati vengono inclusi nell'oggetto statistics. Le statistiche sulle espressioni univariate vengono create automaticamente se la definizione delle statistiche include espressioni complesse anziché semplici riferimenti di colonna.

column_name

Il nome di una colonna della tabella che deve essere coperta dalle statistiche calcolate. Ciò è consentito solo quando si creano statistiche multivariate. È necessario specificare almeno due nomi o espressioni di colonna e il loro ordine non è significativo.

expression

Un'espressione che deve essere inclusa nelle statistiche calcolate. Può essere utilizzata per creare statistiche univariate su una singola espressione o come parte di un elenco di and/or espressioni con più nomi di colonna per creare statistiche multivariate. In quest'ultimo caso, vengono create automaticamente statistiche univariate separate per ogni espressione nell'elenco.

table_name

Il nome (facoltativamente qualificato dallo schema) della tabella contenente la/e colonna/e su cui vengono calcolate le statistiche.

Note

Devi essere il proprietario di una tabella per creare un oggetto statistico che la legge. Una volta creato, tuttavia, la proprietà dell'oggetto statistico è indipendente dalle tabelle sottostanti.

Le statistiche sulle espressioni si riferiscono a ciascuna espressione e sono simili alla creazione di un indice sull'espressione, tranne per il fatto che evitano il sovraccarico della manutenzione dell'indice. Le statistiche sulle espressioni vengono create automaticamente per ogni espressione nella definizione dell'oggetto statistico.

Le statistiche estese non sono attualmente utilizzate dal pianificatore per le stime di selettività effettuate per le unioni di tabelle.

In Aurora DSQL, è possibile creare al massimo 5 oggetti statistici estesi su una singola tabella. Se si supera questo limite, Aurora DSQL restituisce l'errore. more than 5 extended statistics per table are not allowed Per ulteriori informazioni, consulta Limiti del database in Aurora DSQL.

Esempi

Create una tabella t1 con due colonne funzionalmente dipendenti, vale a dire che la conoscenza di un valore nella prima colonna è sufficiente per determinare il valore nell'altra colonna. Quindi le statistiche sulle dipendenze funzionali sono basate su quelle colonne:

CREATE TABLE t1 ( a int, b int ); INSERT INTO t1 SELECT i/100, i/500 FROM generate_series(1,1000000) s(i); ANALYZE t1; -- the number of matching rows will be drastically underestimated: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1; -- now the row count estimate is more accurate: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);

Senza statistiche sulle dipendenze funzionali, il pianificatore assumerebbe che le due WHERE condizioni siano indipendenti e moltiplicherebbe le loro selettività per arrivare a una stima del numero di righe troppo piccola. Con tali statistiche, il pianificatore riconosce che le condizioni sono ridondanti e non sottovaluta il numero di righe. WHERE

Crea una tabella t2 con due colonne perfettamente correlate (contenenti dati identici) e un elenco MCV su tali colonne:

CREATE TABLE t2 ( a int, b int ); INSERT INTO t2 SELECT mod(i,100), mod(i,100) FROM generate_series(1,1000000) s(i); CREATE STATISTICS s2 (mcv) ON a, b FROM t2; ANALYZE t2; -- valid combination (found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 1); -- invalid combination (not found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 2);

L'elenco MCV fornisce al pianificatore informazioni più dettagliate sui valori specifici che appaiono comunemente nella tabella, nonché un limite superiore alla selettività delle combinazioni di valori che non compaiono nella tabella, consentendogli di generare stime migliori in entrambi i casi.