Bewährte Methoden für die Gestaltung von Abfragen mit Amazon Redshift - Amazon Redshift

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.

Bewährte Methoden für die Gestaltung von Abfragen mit Amazon Redshift

Befolgen Sie diese Empfehlungen beim Erstellen von Abfragen, um die Abfrageleistung zu maximieren:

  • Gestalten Sie die Tabellen unter Berücksichtigung der bewährten Methoden, um eine solide Grundlage für die Abfrageleistung zu schaffen. Weitere Informationen finden Sie unter Bewährte Methoden für die Gestaltung von Tabellen mit Amazon Redshift.

  • Vermeiden Sie die Verwendung von select *. Schließen Sie nur die Spalten ein, die Sie wirklich benötigen.

  • Verwenden Sie einen Der bedingte Ausdruck CASE zur Durchführung komplexer Aggregierungen, anstatt mehrmals aus der selben Tabelle auszuwählen.

  • Verwenden Sie Cross-Joins nur wenn unbedingt erforderlich. Diese Joins ohne Join-Bedingung ergeben das cartesische Produkt zweier Tabellen. Cross-Joins werden typischerweise als verschachtelte Loop–Joins durchgeführt; dies ist der langsamste der möglichen Join-Typen.

  • Verwenden Sie Unterabfragen, wenn eine Tabelle in der Abfrage nur für Prädikatbedingungen verwendet wird, und die Unterabfrage eine kleine Zahl von Zeilen (weniger als etwa 200) zurückgibt. Das folgende Beispiel verwendet eine Unterabfrage, um das Joining der LISTING-Tabelle zu vermeiden.

    select sum(sales.qtysold) from sales where salesid in (select listid from listing where listtime > '2008-12-26');
  • Verwenden Sie Prädikate, um den Datensatz so weit wie möglich einzuschränken.

  • Verwenden Sie in den Prädikaten die Operatoren mit den geringstmöglichen Kosten. Vergleichsbedingung-Operatoren sind gegenüber LIKE-Operatoren vorzuziehen. LIKE-Operatoren sind weiterhin gegenüber SIMILAR TO oder POSIX-Operatoren vorzuziehen.

  • Vermeiden Sie die Verwendung von Funktionen in Abfrageprädikaten. Deren Verwendung kann die Kosten der Abfrage dadurch erhöhen, dass große Zahlen von Zeilen die Zwischenschritte der Abfrage auflösen müssen.

  • Verwenden Sie nach Möglichkeit eine WHERE-Klausel, um den Datensatz einzuschränken. Der Abfrageplaner kann dann die Zeilenreihenfolge verwenden, um zu bestimmen, welche Datensätze den Kriterien entsprechen, und entsprechend das Scannen großer Zahlen von Festplattenblöcken überspringen. Ohne dies muss die Abfrageausführung die beteiligten Spalten vollständig scannen.

  • Fügen Sie Prädikate zu Filtertabellen hinzu, die an Joins beteiligt sind, selbst wenn die Prädikate die gleichen Filter anwenden. Die Abfrage gibt den gleichen Ergebnissatz zurück, Amazon Redshift kann jedoch die Join-Tabellen vor dem Scan-Schritt filtern und dann das Scannen von Blöcken aus diesen Tabellen effektiv übergehen. Redundante Filter werden nicht benötigt, wenn Sie auf einer Spalte filtern, die in der Join-Bedingung verwendet wird.

    Nehmen Sie zum Beispiel an, Sie möchten SALES und LISTING verbinden, um Ticketverkäufe für nach dem Dezember gelistete Tickets, gruppiert nach Verkäufer, zu finden. Beide Tabellen werden nach Datum sortiert. Die folgende Abfrage verbindet die Tabellen auf ihrem gemeinsamen Schlüssel und filtert nach listing.listtime-Werten nach dem 1. Dezember.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' group by 1 order by 1;

    Die WHERE-Klausel enthält kein Prädikat für sales.saletime, die Ausführungsengine muss daher die gesamte SALES-Tabelle filtern. Wenn Sie wissen, dass der Filter dazu führt, dass weniger Zeilen an dem Join beteiligt sind, fügen Sie auch diesen Filter hinzu. Beim folgenden Beispiel ist die Ausführungszeit erheblich verkürzt.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' and sales.saletime > '2008-12-01' group by 1 order by 1;
  • Verwenden Sie Sortierschlüssel in der GROUP BY-Klausel, so dass der Abfrageplaner eine effizientere Aggregierung verwenden kann. Eine Abfrage kann für eine einphasige Aggregierung in Frage kommen, wenn ihre GROUP BY-Liste Sortierschlüsselspalten enthält, von denen eine auch der Verteilungsschlüssel ist. Die Sortierschlüsselspalten in der GROUP BY-Liste müssen den ersten Sortierschlüssel und dann weitere Sortierschlüssel, die Sie verwenden möchten, in der Sortierschlüsselreihenfolge enthalten. So ist es beispielsweise korrekt, den ersten Sortierschlüssel, den ersten und den zweiten Sortierschlüssel, den ersten, zweiten und dritten Sortierschlüssel zu verwenden usw. Es ist nicht möglich, den ersten und den dritten Sortierschlüssel zu verwenden.

    Sie können die Verwendung der einphasigen Aggregierung bestätigen, indem Sie den Befehl EXPLAIN verwenden und nach XN GroupAggregate im Aggregierungsschritt der Abfrage suchen.

  • Wenn Sie die GROUP BY- und die ORDER BY-Klausel verwenden, müssen Sie sicherstellen, dass die Spalten in beiden die gleiche Reihenfolge haben. Gehen Sie also einfach wie folgt vor:

    group by a, b, c order by a, b, c

    Gehen Sie nicht wie folgt vor.

    group by b, c, a order by a, b, c