Beschleunigung von Verknüpfungsabfragen mit Suchoptimierung

Der Suchoptimierungsdienst kann die Leistung von Abfragen verbessern, die eine geringe Anzahl von unterschiedlichen Werten auf der Build-Seite der Verknüpfung haben.

Der Suchoptimierungsdienst kann zum Beispiel die Leistung dieser Arten von Verknüpfungen verbessern:

  • Angenommen, products ist eine Tabelle, die für jedes Produkt eine Zeile enthält, und sales ist eine Tabelle, die für jeden Verkauf eines Produkts eine Zeile enthält. Die Tabelle products enthält weniger Zeilen und ist kleiner als die Tabelle sales. Um alle Verkäufe eines bestimmten Produkts zu ermitteln, verknüpfen Sie die Tabelle sales (die größere Tabelle) mit der Tabelle products (die kleinere Tabelle). Da die Tabelle products klein ist, gibt es nur wenige eindeutige Werte auf der Build-Seite der Verknüpfung.

    Bemerkung

    Im Data Warehousing wird die große Tabelle häufig als Faktentabelle bezeichnet. Die kleine Tabelle wird als Dimensionstabelle bezeichnet. Im weiteren Verlauf dieses Themas werden diese Begriffe verwendet, wenn wir uns auf die große Tabelle und die kleine Tabelle in einer Verknüpfung beziehen.

  • Nehmen wir an, customers ist eine Tabelle, die eine Zeile für jeden Kunden enthält, und sales ist eine Tabelle, die eine Zeile für jeden Verkauf enthält. Beide Tabellen sind groß. Um alle Verkäufe für einen bestimmten Kunden zu finden, verknüpfen Sie die Tabelle sales (die Probe-Seite) mit der Tabelle customers (die Build-Seite) und verwenden einen Filter, sodass auf der Build-Seite der Verknüpfung eine kleine Anzahl eindeutiger Werte vorhanden ist.

In den folgenden Abschnitten finden Sie weitere Informationen zur Unterstützung der Suchoptimierung für Join-Abfragen:

Aktivieren der Suchoptimierung für Join-Abfragen

Um die Leistung von Join-Abfragen zu verbessern, stellen Sie sicher, dass die Suchoptimierung für Spalten im Join-Prädikat der Abfrage aktiviert ist. Vergewissern Sie sich außerdem, dass die Build-Seite des Joins eine geringe Anzahl eindeutiger Werte aufweist, entweder weil es sich um eine kleine Dimensionstabelle handelt oder weil ein selektiver Filter verwendet wurde. Die Kosten für die Laufzeit der Suchoptimierung einer Abfrage stehen im Verhältnis zur Anzahl der unterschiedlichen Werte, die auf der Build-Seite des Joins nachgeschlagen werden müssen. Wenn diese Zahl zu groß ist, entscheidet sich Snowflake möglicherweise gegen die Verwendung des Suchzugriffspfads und verwendet stattdessen den regulären Tabellenzugriffspfad.

Um die Leistung von Join-Abfragen zu verbessern, aktivieren Sie die Suchoptimierung für die Tabelle auf der Prüfseite des Joins. Bei dieser Tabelle handelt es sich in der Regel um eine große Tabelle, die in Verknüpfungensabfragen nicht gefiltert wird, wie z. B. eine Faktentabelle.

Verwenden Sie den Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION um:

  • Aktivieren Sie die Suchoptimierung für bestimmte Spalten.

  • Aktivieren Sie die Suchoptimierung für alle Spalten der Tabelle.

Im Allgemeinen ist es eine bewährte Praxis, die Suchoptimierung nur für bestimmte Spalten zu aktivieren. Verwenden Sie die ON EQUALITY-Klausel, um die Spalten anzugeben. Dieses Beispiel ermöglicht die Suchoptimierung für eine bestimmte Spalte:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
Copy

So geben Sie EQUALITY für alle Spalten der unterstützten Datentypen an (außer für halbstrukturierte und GEOGRAPHY):

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

Unterstützte Verknüpfungsprädikate

Der Suchoptimierungsdienst kann die Leistung von Abfragen mit den folgenden Typen von Verknüpfungsprädikaten verbessern:

  • Gleichheitsprädikate der Form probe_side_table.column = build_side_table.column.

  • Transformationen des Operanden auf der Build-Seite des Prädikats (z. B. Zeichenfolgenverkettung, Addition usw.).

  • Konjunktionen (AND) von mehreren Gleichheitsprädikaten.

Beispiele für unterstützte Join-Abfragen

In diesem Abschnitt finden Sie Beispiele für Verknüpfungsabfragen, die von einer Suchoptimierung profitieren können.

Beispiel: Einfaches Gleichheitsprädikat

Es folgt ein Beispiel für eine unterstützte Abfrage, die ein einfaches Gleichheitsprädikat als Verknüpfungsprädikat verwendet. Diese Abfrage verknüpft eine Tabelle namens sales mit einer Tabelle namens customers. Die Tabelle auf der Probe-Seite sales ist groß und hat eine Suchoptimierung aktiviert. Die Tabelle customers auf der Build-Seite ist ebenfalls groß, aber die Eingabe aus dieser Tabelle ist aufgrund des selektiven Filters für die Spalte customer_id klein.

SELECT sales.date, customer.name
  FROM sales JOIN customers ON (sales.customer_id = customers.customer_id)
  WHERE customers.customer_id = 2094;
Copy

Beispiel: Prädikat transformiert auf den dimensionsseitigen Operanden

Die folgende Abfrage verknüpft eine Faktentabelle namens sales mit einer Dimensionstabelle namens products. Für die sehr große Faktentabelle ist die Suchoptimierung aktiviert. Die Dimensionstabelle ist klein.

Diese Abfrage transformiert den dimensionsseitigen Operanden des Prädikats (z. B. durch Multiplikation der Werte in der Verknüpfungsbedingung) und kann von der Suchoptimierung profitieren:

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.old_id * 100)
  WHERE product.category = 'Cutlery';
Copy

Beispiel: Prädikat, das sich über mehrere Spalten erstreckt

Abfragen, in denen sich ein Verknüpfungsprädikat über mehrere Spalten erstreckt, können von einer Suchoptimierung profitieren:

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.id and sales.location = product.place_of_production)
  WHERE product.category = 'Cutlery';
Copy

Beispiel: Abfrage mit Point-Lookup-Filtern und Verknüpfungsprädikaten

Bei einer Abfrage, die sowohl reguläre Point-Lookup-Filter als auch Verknüpfungsprädikate verwendet, kann der Suchoptimierungsdienst die Leistung von beiden verbessern. In der folgenden Abfrage kann der Suchoptimierungsdienst sowohl das sales.location Point-Lookup-Prädikat als auch das product_id Verknüpfungsprädikat verbessern:

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.id)
  WHERE product.category = 'Cutlery'
  AND sales.location = 'Buenos Aires';
Copy

Einschränkungen

Die folgenden Einschränkungen gelten für den Suchoptimierungsdienst und für Verknüpfungsabfragen:

  • Disjunktionen (OR) in Verknüpfungsprädikaten werden derzeit nicht unterstützt.

  • LIKE, ILIKE, und RLIKE werden derzeit nicht unterstützt.

  • Verknüpfungsprädikate auf VARIANT-Spalten werden derzeit nicht unterstützt.

  • EQUAL_NULL Gleichheitsprädikate werden derzeit nicht unterstützt.

  • Die aktuellen Einschränkungen des Suchoptimierungsdienstes gelten auch für Verknüpfungsabfragen.