Bewährte Methoden für das Entwerfen von Amazon Redshift Redshift-Abfragen - AWS Präskriptive Leitlinien

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 das Entwerfen von Amazon Redshift Redshift-Abfragen

Dieser Abschnitt bietet einen Überblick über bewährte Methoden für das Entwerfen von Abfragen. Wir empfehlen Ihnen, die bewährten Methoden in diesem Abschnitt zu befolgen, um eine optimale Abfrageleistung und Effizienz zu erzielen.

Vermeiden Sie die Verwendung der SELECT * FROM-Anweisung

Wir empfehlen, die SELECT * FROM Anweisung nicht zu verwenden. Listen Sie stattdessen immer Spalten für die Analyse auf. Dies reduziert die Abfrageausführungszeit und die Scankosten für Amazon Redshift Spectrum Spectrum-Abfragen.

Beispiel dafür, was vermieden werden sollte

select * from sales;

Beispiel für bewährte Verfahren

select sales_date, sales_amt from sales;

Identifizieren Sie Probleme mit Abfragen

Wir empfehlen Ihnen, die Ansicht STL_ALERT_EVENT_LOG zu überprüfen, um mögliche Probleme mit Ihrer Abfrage zu identifizieren und zu beheben.

Rufen Sie zusammenfassende Informationen zu Ihrer Abfrage ab

Wir empfehlen, die Ansichten SVL_QUERY_SUMMARY und SVL_QUERY_REPORT zu verwenden, um zusammenfassende Informationen zu Ihren Abfragen zu erhalten. Sie können diese Informationen verwenden, um Ihre Abfragen zu optimieren.

Vermeiden Sie Kreuzverknüpfungen

Wir empfehlen, Cross-Joins zu vermeiden, sofern dies nicht unbedingt erforderlich ist. Ohne eine Verbindungsbedingung ergeben Kreuzverknüpfungen das kartesische Produkt zweier Tabellen. Kreuzverknüpfungen werden in der Regel als Nested-Loop-Joins ausgeführt (der langsamste aller möglichen Join-Typen).

Beispiel dafür, was vermieden werden sollte

select c.c_name, n.n_name from tpch.customer c, tpch.nation n;

Beispiel für bewährte Verfahren

select c.c_name, n.n_name from tpch.customer c, join tpch.nation n on n.n_nationkey = c.c_nationkey;

Vermeiden Sie Funktionen in Abfrageprädikaten

Es wird empfohlen, die Verwendung von Funktionen in Abfrageprädikaten zu vermeiden. Die Verwendung von Funktionen in Abfrageprädikaten kann sich negativ auf die Leistung auswirken, da Funktionen in der Regel für jede Zeile zusätzlichen Verarbeitungsaufwand bedeuten und die Gesamtausführung der Abfrage verlangsamen.

Beispiel dafür, was vermieden werden sollte

select sum(o_totalprice) from tpch.orders where datepart(year, o_orderdate) = 1992;

Beispiel für bewährte Verfahren

select sum(o_totalprice) from tpch.orders where o_orderdate between '1992-01-01' and '1992-12-31';

Vermeiden Sie unnötige Cast-Konvertierungen

Es wird empfohlen, unnötige Umwandlungskonvertierungen für die Abfragen zu vermeiden, da das Umwandeln von Datentypen Zeit und Ressourcen beansprucht und die Abfrageausführung verlangsamt.

Beispiel dafür, was vermieden werden sollte

select sum(o_totalprice) from tpch.orders where o_ordertime::date = '1992-01-01';

Beispiel für bewährte Verfahren

select sum(o_totalprice) from tpch.orders where o_ordertime between '1992-01-01 00:00:00' and '1992-12-31 23:59:59';

Verwenden Sie CASE-Ausdrücke für komplexe Aggregationen

Es wird empfohlen, einen CASE-Ausdruck zu verwenden, um komplexe Aggregationen durchzuführen, anstatt mehrmals aus derselben Tabelle auszuwählen.

Beispiel dafür, was vermieden werden sollte

select sum(sales_amt) as us_sales from sales where country = 'US'; select sum(sales_amt) as ca_sales from sales where country = 'CA';

Beispiel für bewährte Verfahren

select sum(case when country = 'US' then sales_amt end) as us_sales, sum(case when country = 'CA' then sales_amt end) as ca_sales from sales;

Verwenden Sie Unterabfragen

Es wird empfohlen, Unterabfragen in Fällen zu verwenden, in denen eine Tabelle in der Abfrage nur für Prädikatbedingungen verwendet wird und die Unterabfrage eine geringe Anzahl von Zeilen zurückgibt (weniger als etwa 200).

Beispiel dafür, was vermieden werden sollte

Wenn eine Unterabfrage weniger als 200 Zeilen zurückgibt:

select sum(order_amt) as total_sales from sales where region_key IN (select region_key from regions where state = 'CA');

Beispiel für ein bewährtes Verfahren

Wenn eine Unterabfrage mehr als oder gleich 200 Zeilen zurückgibt:

select sum(o.order_amt) as total_sales from sales o join regions r on r.region_key = o.region_key and r.state = 'CA';

Verwenden Sie Prädikate

Wir empfehlen, Prädikate zu verwenden, um den Datensatz so weit wie möglich einzuschränken. Prädikate werden in SQL verwendet, um die in einer Abfrage zurückgegebenen Daten zu filtern und einzuschränken. Durch die Angabe von Bedingungen in einem Prädikat können Sie auf der Grundlage bestimmter Bedingungen angeben, welche Zeilen in den Abfrageergebnissen enthalten sein müssen. Auf diese Weise können Sie nur die Daten abrufen, an denen Sie interessiert sind, und die Effizienz und Genauigkeit Ihrer Abfragen wird verbessert. Weitere Informationen finden Sie unter Bedingungen in der Amazon Redshift Redshift-Dokumentation.

Fügen Sie Prädikate hinzu, um Tabellen mit Verknüpfungen zu filtern

Es wird empfohlen, Prädikate hinzuzufügen, um Tabellen zu filtern, die an Verknüpfungen beteiligt sind, auch wenn die Prädikate dieselben Filter anwenden. Die Verwendung von Prädikaten zum Filtern von Tabellen mit Verknüpfungen in SQL kann die Abfrageleistung verbessern, indem die Menge der zu verarbeitenden Daten und die Größe der Zwischenergebnismenge reduziert werden. Durch die Angabe der Bedingungen für den Join-Vorgang in der WHERE Klausel kann das Modul zur Abfrageausführung Zeilen entfernen, die die Bedingungen nicht erfüllen, bevor sie verknüpft werden. Dies führt zu einer kleineren Ergebnismenge und einer schnelleren Abfrageausführung.

Beispiel dafür, was vermieden werden sollte

select p.product_name, sum(o.order_amt) from sales o join product p on r.product_key = o.product_key where o.order_date > '2022-01-01';

Beispiel für bewährte Verfahren

select p.product_name, sum(o.order_amt) from sales o join product p on p.product_key = o.product_key and p.added_date > '2022-01-01' where o.order_date > '2022-01-01';

Verwenden Sie die kostengünstigsten Operatoren für Prädikate

Verwenden Sie im Prädikat die kostengünstigsten Operatoren, die Ihnen zur Verfügung stehen. Operatoren für Vergleichsbedingungen sind LIKE-Operatoren vorzuziehen. LIKEOperatoren sind immer noch SIMILAR TO - oder POSIX-Operatoren vorzuziehen.

Verwenden Sie Sortierschlüssel in GROUP BY-Klauseln

Verwenden Sie Sortierschlüssel in der GROUP BY Klausel, damit der Abfrageplaner eine effizientere Aggregation verwenden kann. Eine Abfrage kann für eine einphasige Aggregation in Frage kommen, wenn ihre GROUP BY Liste nur 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 enthalten, gefolgt von anderen Sortierschlüsseln, die Sie in der Reihenfolge der Sortierschlüssel verwenden möchten.

Nutzen Sie die Vorteile materialisierter Ansichten

Wenn möglich, schreiben Sie die Abfrage neu, indem Sie den komplexen Code durch eine materialisierte Ansicht ersetzen, wodurch die Leistung der Abfrage erheblich verbessert wird. Weitere Informationen finden Sie unter Erstellen materialisierter Ansichten in Amazon Redshift in der Amazon Redshift Redshift-Dokumentation.

Seien Sie vorsichtig mit Spalten in den Klauseln GROUP BY und ORDER BY

Wenn Sie sowohl GROUP BY - als auch ORDER BY Klauseln verwenden, stellen Sie sicher, dass Sie die Spalten in den Klauseln GROUP BY sowohl ORDER BY als auch in derselben Reihenfolge anordnen. GROUP BYerfordert implizit, dass die Daten sortiert werden. Wenn Ihre ORDER BY Klausel anders ist, müssen die Daten zweimal sortiert werden.

Beispiel dafür, was zu vermeiden ist

select a, b, c, sum(d) from a_table group by b, c, a order by a, b, c

Beispiel für bewährte Verfahren

select a, b, c, sum(d) from a_table group by a, b, c order by a, b, c