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 zugreifen, indem Sie die dem QUERY_INSIGHTS-Ansicht abfragen.
In den nächsten Abschnitten finden Sie Details zu Abfrageerkenntnissen:
Liste der Erkenntnistypen¶
Die QUERY_INSIGHTS-Ansicht liefert 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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.
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.
„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.
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.
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 sichere Objekte betreffen.
In Hybridtabellen (Unistore) ausgeführte Abfragen.
Von Native Apps generierte Abfragen.
EXPLAIN -Abfragen.
Abfragen, die Ergebnisse wiederverwenden.