Verwenden von Abfrageanalysen zur Verbesserung der Abfrageleistung¶
Wenn Bedingungen vorliegen, die sich auf die Abfrageleistung auswirken, bietet Snowflake Erkenntnisse über diese Bedingungen. Jeder Einblick enthält eine Meldung, die erklärt, wie die Abfrageleistung beeinflusst werden könnte, und eine allgemeine Empfehlung zur Verbesserung der Leistung.
Sie können auf diese Erkenntnisse in |sf-web-interface|sowie durch Abfragen der Ansicht QUERY_INSIGHTS zugreifen.
In den nächsten Abschnitten finden Sie Details zu Abfrageerkenntnissen:
Liste der Erkenntnistypen¶
Der Bereich Query Insights und die QUERY_INSIGHTS-Ansicht liefern die erforderlichen Erkenntnisse:
Eine Meldung über die erkannte Bedingung und wie diese die Abfrageleistung beeinträchtigen kann.
Details zu dem Teil der Abfrage, der die Bedingung erzeugt hat.
Ein vorgeschlagener nächster Schritt zur Behandlung der Bedingung, wenn die Bedingung die Leistung negativ beeinflusst.
In der folgenden Tabelle sind die Typen von Erkenntnissen nach Typ-ID aufgeführt.
Typ-ID |
Erkenntnis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abfrage, die von der Suchoptimierung und Snowflake Optima profitiert hat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Die Abfrage befand sich zu lange in der Warteschlange für das Warehouse |
Kein Filter beim Tabellenscan¶
Eine Abfrage oder Unterabfrage hat keine WHERE-Klausel, was bedeutet, dass die Abfrage eine ganze Tabelle durchsucht und möglicherweise mehr Zeilen als beabsichtigt zurückgibt.
Um die Leistung zu verbessern, fügen Sie eine WHERE-Klausel hinzu, um die Menge der gescannten Daten zu reduzieren.
Filter nicht anwendbar¶
Eine WHERE-Klausel filtert keine Zeilen heraus, was bedeutet, dass die Abfrage möglicherweise mehr Daten als beabsichtigt durchsucht.
Um die Leistung zu verbessern, fügen Sie der WHERE-Klausel eine selektivere Bedingung hinzu, oder machen Sie die bestehende Bedingung selektiver.
Filter nicht selektiv¶
Bei einer WHERE-Klausel wird die Anzahl der Zeilen nicht wesentlich reduziert, was bedeutet, dass die Abfrage möglicherweise mehr Daten als beabsichtigt durchsucht.
Im Gegensatz zur Erkenntnis Filter nicht anwendbar, zeigt diese Erkenntnis an, dass die WHERE-Klausel einige Zeilen herausfiltert, aber es selektiver hätte sein können.
Um die Leistung zu verbessern, fügen Sie der WHERE-Klausel eine selektivere Bedingung hinzu, oder machen Sie die bestehende Bedingung selektiver.
LIKE filter with leading wildcard¶
The query uses a LIKE filter that starts with a wildcard character. Specifying a pattern that starts with a wildcard can result in scanning a large amount of data.
To reduce the amount of data scanned, specify a pattern that does not start with a wildcard, if possible. If you need to specify a pattern that starts with a wildcard, consider enabling search optimization for more efficient pattern matching.
Filter verwendet Gruppierungsschlüssel¶
Die Abfrage profitierte vom Filtern nach einem Gruppierungsschlüssel für die Tabelle.
Abfrage, die von der Suchoptimierung profitierte¶
Die Abfrage hat vom Filtern nach einer Spalte profitiert, die für die Suchoptimierung konfiguriert ist.
Abfrage, die von Snowflake Optima profitiert hat¶
Die Abfrage hat von Snowflake Optima profitiert.
Abfrage, die von der Suchoptimierung und Snowflake Optima profitiert hat¶
Die Abfrage hat von der Suchoptimierung und Snowflake Optima profitiert.
Verknüpfung ohne Verknüpfungsbedingung¶
In der Verknüpfung fehlt die Verknüpfungsbedingung. Das Ergebnis ist eine Kreuzverknüpfung, die jede mögliche Kombination von Zeilen zurückgibt.
Um die Anzahl der von dieser Verknüpfung erzeugten Zeilen zu verringern, geben Sie eine oder mehrere Verknüpfungsbedingungen an.
Join with inefficient join condition¶
The join contains a complex join condition that is evaluated after the data sets are joined. This is less efficient than if the condition were evaluated before the data sets were joined, which reduces the amount of data that the join must process.
To speed up this query, simplify the join condition.
„Explodierende“ Verknüpfung (verschachtelte Verknüpfung)¶
Eine Verknüpfung, die die Ausgabe mindestens einer anderen Verknüpfung enthält, gibt viel mehr Zeilen zurück als in den zu verbindenden Tabellen enthalten sind. Dies könnte auf ein Problem mit den Verknüpfungsbedingungen für die untergeordneten Verknüpfungen hinweisen.
Um zu verhindern, dass die Verknüpfung mehr Zeilen erzeugt als die verknüpften Tabellen enthalten, fügen Sie die Verknüpfungsbedingungen für die untergeordneten Verknüpfungen hinzu, oder ändern Sie sie. Darüber hinaus kann das Hinzufügen einer WHERE-Klausel zu einer Unterabfrage, die in einer untergeordneten Verknüpfung verwendet wird, die Anzahl der zurückgegebenen Zeilen verringern.
„Explodierende“ Verknüpfung (nicht verschachtelt)¶
Eine Verknüpfung von zwei Datensets (z. B. Tabellen, Ansichten oder die Ausgabe von Tabellenfunktionsaufrufen) gibt :ref:` viel mehr Zeilen zurück als die verknüpften Tabellen enthalten <label-exploding_join>`. Dies könnte auf ein Problem mit der Verknüpfungsbedingung hinweisen.
Um zu verhindern, dass die Verknüpfung mehr Zeilen erzeugt als in den zu verknüpfenden Tabellen enthalten sind, fügen Sie die Verknüpfungsbedingung hinzu, oder ändern Sie sie. Darüber hinaus kann das Hinzufügen einer WHERE-Klausel zu einer Unterabfrage, die von dieser Verknüpfung verwendet wird, die Anzahl der zurückgegebenen Zeilen reduzieren.
Unnötige Aggregation¶
Die DISTINCT- oder GROUP BY-Klausel erzeugt die gleiche Anzahl von Zeilen wie dieselbe -Anweisung ohne die DISTINCT- oder GROUP BY-Klausel. Die Angabe der Klausel führt zu einem zusätzlichen Verarbeitungsschritt, der keine Auswirkungen auf das Ergebnis hat.
Um die Leistung zu verbessern, entfernen Sie die unnötige DISTINCT- oder GROUP BY-Klausel.
Unnötige UNION [ DISTINCT ]-Klausel¶
Die UNION [ DISTINCT ]-Klausel ist nicht erforderlich, da die Eingabesets nicht verbunden sind.
Um die Leistung zu verbessern, verwenden Sie UNION ALL anstelle von UNION [ DISTINCT ].
Remote-Überlauf¶
Diese Abfrage durchsuchte mehr Daten als das Warehouse speichern konnte. Infolgedessen übertrug das Warehouse Daten auf den Speicher, was die Verarbeitung der Abfrage verlangsamte.
Um dieses Problem zu vermeiden, verwenden Sie ein größeres Warehouse mit mehr Kapazität. Wenn die Verwendung eines größeren Warehouses nicht möglich ist, ändern Sie die Abfrage so, dass die Daten in kleineren Batches verarbeitet werden.
Die Abfrage befand sich zu lange in der Warteschlange für das Warehouse¶
Diese Abfrage hat zu lange in der Warteschlange für das Warehouse gewartet.
Um dieses Problem zu vermeiden, verwenden Sie ein größeres Warehouse mit mehr Kapazität oder ein Warehouse mit weniger gleichzeitigen Abfragen.
Anzeigen der Abfrage-Erkenntnisse in Snowsight¶
Auf der Registerkarte Query Profile unter Query History können Sie die Erkenntnisse zu einer Abfrage anzeigen. Die Knoten mit den entsprechenden Erkenntnissen sind hervorgehoben.
Im Bereich Query Insights auf der rechten Seite wird jede Art von Erkenntnissen angezeigt, die für diese Abfrage erkannt wurde. Es wird jede Instanz dieser Art von Erkenntnis aufgeführt, die für die Abfrage identifiziert wurde. Um mehr über die erkannte Bedingung zu erfahren, wählen Sie View neben einem Eintrag im Bereich Query Insights aus.
Die Details enthalten die empfohlenen nächsten Schritte, die Sie unternehmen können, um die Leistung der Abfrage zu verbessern. Sie können Learn more auswählen, um weitere Informationen zu dieser Erkenntnis zu erhalten.
Einschränkungen¶
Erkenntnisse werden für SQL-Abfragen erzeugt, die für Datenbanken erfolgen und von Warehouses verarbeitet werden.
Es werden keine Erkenntnisse für Folgendes erstellt:
Abfragen, die möglicherweise vom Abfragebeschleunigungsdienst profitieren würden.
Abfragen, bei denen der Abfrageplan mehrere Schritte benötigt, um abgeschlossen zu werden.
Abfragen, die sichere Objekte betreffen.
In Hybridtabellen (Unistore) ausgeführte Abfragen.
Von Native Apps generierte Abfragen.
EXPLAIN -Abfragen.
Abfragen, die Ergebnisse wiederverwenden.
Queries executing on interactive tables.