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

QUERY_INSIGHT_NO_FILTER_ON_TOP_OF_TABLE_SCAN

Kein Filter beim Tabellenscan

QUERY_INSIGHT_INAPPLICABLE_FILTER_ON_TABLE_SCAN

Filter nicht anwendbar

QUERY_INSIGHT_UNSELECTIVE_FILTER

Filter nicht selektiv

QUERY_INSIGHT_FILTER_WITH_CLUSTERING_KEY

Filter verwendet Gruppierungsschlüssel

QUERY_INSIGHT_SEARCH_OPTIMIZATION_USED

Abfrage, die von der Suchoptimierung profitierte

QUERY_INSIGHT_JOIN_WITH_NO_JOIN_CONDITION

Verknüpfung ohne Verknüpfungsbedingung

QUERY_INSIGHT_NESTED_EXPLODING_JOIN

„Explodierende“ Verknüpfung (verschachtelte Verknüpfung)

QUERY_INSIGHT_EXPLODING_JOIN

„Explodierende“ Verknüpfung (nicht verschachtelt)

QUERY_INSIGHT_REMOTE_SPILLAGE

Remote-Überlauf

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.