Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CREATE STATISTICS
Unterstützte Syntax
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 STATISTICSerstellt ein neues erweitertes Statistikobjekt, das Daten über die angegebene Tabelle verfolgt. Das Statistikobjekt wird in der aktuellen Datenbank erstellt und gehört demjenigen Benutzer, der den Befehl ausgibt.
Der CREATE STATISTICS Befehl hat zwei Grundformen. Mit der ersten Form können univariate Statistiken für einen einzelnen Ausdruck erfasst werden, was Vorteile bietet, die denen eines Ausdrucksindex ähneln, ohne den Aufwand der Indexverwaltung. In diesem Formular kann der Statistiktyp nicht angegeben werden, da sich die verschiedenen Statistiktypen nur auf multivariate Statistiken beziehen. Mit der zweiten Form des Befehls können multivariate Statistiken zu and/or Ausdrücken mit mehreren Spalten gesammelt werden, wobei optional angegeben wird, welche Statistikarten eingeschlossen werden sollen. Dieses Formular führt auch automatisch dazu, dass univariate Statistiken für alle in der Liste enthaltenen Ausdrücke erfasst werden.
Wenn ein Schemaname angegeben wird (z. B.CREATE STATISTICS myschema.mystat
...), wird das Statistikobjekt im angegebenen Schema erstellt. Andernfalls wird es im aktuellen Schema erstellt. Falls angegeben, muss sich der Name des Statistikobjekts von dem Namen aller anderen Statistikobjekte im selben Schema unterscheiden.
Parameters
IF NOT EXISTS-
Gibt keinen Fehler aus, wenn bereits ein Statistikobjekt mit demselben Namen existiert. In diesem Fall wird eine Mitteilung ausgegeben. Beachten Sie, dass hier nur der Name des Statistikobjekts berücksichtigt wird, nicht die Details seiner Definition. Der Statistikname ist erforderlich, wenn er angegeben
IF NOT EXISTSist. statistics_name-
Der Name (optional schemaqualifiziert) des Statistikobjekts, das erstellt werden soll. Wenn der Name weggelassen wird, wählt Aurora DSQL einen geeigneten Namen aus, der auf dem Namen der übergeordneten Tabelle und den definierten and/or Ausdrücken für Spaltennamen basiert.
statistics_kind-
Eine multivariate Statistikart, die in diesem Statistikobjekt berechnet werden soll. Derzeit werden folgende Typen unterstützt
ndistinct, die n-verschiedene Statistiken ermöglichendependencies, funktionale Abhängigkeitsstatistiken ermöglichen und Listen mitmcvden häufigsten Werten ermöglichen. Wenn diese Klausel weggelassen wird, sind alle unterstützten Statistiktypen im Statistikobjekt enthalten. Statistiken mit univariaten Ausdrücken werden automatisch erstellt, wenn die Statistikdefinition komplexe Ausdrücke und nicht nur einfache Spaltenverweise enthält. column_name-
Der Name einer Tabellenspalte, die von den berechneten Statistiken abgedeckt werden soll. Dies ist nur bei der Erstellung multivariater Statistiken zulässig. Es müssen mindestens zwei Spaltennamen oder Ausdrücke angegeben werden, und ihre Reihenfolge ist nicht signifikant.
expression-
Ein Ausdruck, der von den berechneten Statistiken abgedeckt werden soll. Dies kann verwendet werden, um univariate Statistiken anhand eines einzelnen Ausdrucks zu erstellen, oder als Teil einer Liste von and/or Ausdrücken mit mehreren Spaltennamen, um multivariate Statistiken zu erstellen. Im letzteren Fall werden separate univariate Statistiken automatisch für jeden Ausdruck in der Liste erstellt.
table_name-
Der Name (optional schemaqualifiziert) der Tabelle, die die Spalte (n) enthält, für die die Statistiken berechnet werden.
Hinweise
Sie müssen der Besitzer einer Tabelle sein, um ein Statistikobjekt zu erstellen, das sie liest. Nach der Erstellung ist der Eigentümer des Statistikobjekts jedoch unabhängig von den zugrunde liegenden Tabellen.
Ausdrucksstatistiken werden pro Ausdruck berechnet und ähneln der Erstellung eines Indexes für den Ausdruck, mit der Ausnahme, dass sie den Aufwand für die Indexverwaltung vermeiden. Ausdrucksstatistiken werden automatisch für jeden Ausdruck in der Statistikobjektdefinition erstellt.
Erweiterte Statistiken werden derzeit vom Planer nicht für Selektivitätsschätzungen verwendet, die für Tabellenverknüpfungen vorgenommen werden.
In Aurora DSQL können Sie maximal 5 erweiterte Statistikobjekte in einer einzelnen Tabelle erstellen. Wenn Sie dieses Limit überschreiten, gibt Aurora DSQL den Fehler zurück. more than 5 extended statistics per table
are not allowed Weitere Informationen finden Sie unter Datenbanklimits in Aurora DSQL.
Beispiele
Erstellen Sie eine Tabelle t1 mit zwei funktionell abhängigen Spalten, d. h. die Kenntnis eines Werts in der ersten Spalte reicht aus, um den Wert in der anderen Spalte zu bestimmen. Dann werden funktionale Abhängigkeitsstatistiken auf diesen Spalten aufgebaut:
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);
Ohne Statistiken über funktionale Abhängigkeiten würde der Planer davon ausgehen, dass die beiden WHERE Bedingungen unabhängig sind, und ihre Selektivitäten miteinander multiplizieren, um eine viel zu kleine Schätzung der Zeilenanzahl zu erhalten. Anhand solcher Statistiken erkennt der Planer, dass die WHERE Bedingungen überflüssig sind, und unterschätzt die Anzahl der Zeilen nicht.
Erstellen Sie eine Tabelle t2 mit zwei perfekt korrelierten Spalten (die identische Daten enthalten) und einer MCV-Liste für diese Spalten:
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);
Die MCV-Liste gibt dem Planer detailliertere Informationen über die spezifischen Werte, die häufig in der Tabelle vorkommen, sowie eine Obergrenze für die Selektivitäten von Wertekombinationen, die nicht in der Tabelle vorkommen, sodass er in beiden Fällen bessere Schätzungen erstellen kann.