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. LIKE
Operatoren 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 BY
erfordert 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