

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
<a name="best-practices-designing-queries"></a>

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 \$1 FROM-Anweisung
<a name="select-from-statement"></a>

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
<a name="query-issues"></a>

Wir empfehlen Ihnen, die Ansicht [STL\$1ALERT\$1EVENT\$1LOG zu überprüfen, um mögliche Probleme mit Ihrer](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ALERT_EVENT_LOG.html) Abfrage zu identifizieren und zu beheben.

## Rufen Sie zusammenfassende Informationen zu Ihrer Abfrage ab
<a name="summary-info"></a>

Wir empfehlen, die Ansichten SVL\$1QUERY\$1SUMMARY und [SVL\$1QUERY\$1REPORT zu verwenden, um zusammenfassende](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_SUMMARY.html) [Informationen zu Ihren Abfragen](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_REPORT.html) zu erhalten. Sie können diese Informationen verwenden, um Ihre Abfragen zu optimieren.

## Vermeiden Sie Kreuzverknüpfungen
<a name="cross-joins"></a>

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
<a name="functions-query-predicates"></a>

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
<a name="cast-conversions"></a>

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
<a name="case-expressions"></a>

Es wird empfohlen, einen [CASE-Ausdruck](https://docs.aws.amazon.com/redshift/latest/dg/r_CASE_function.html) 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
<a name="subqueries"></a>

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
<a name="predicates"></a>

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](https://docs.aws.amazon.com/redshift/latest/dg/r_conditions.html) in der Amazon Redshift Redshift-Dokumentation.

## Fügen Sie Prädikate hinzu, um Tabellen mit Verknüpfungen zu filtern
<a name="filter-tables-joins"></a>

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, da 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
<a name="least-expensive-operators"></a>

Verwenden Sie im Prädikat die kostengünstigsten Operatoren, die Ihnen zur Verfügung stehen. Operatoren für [Vergleichsbedingungen](https://docs.aws.amazon.com/redshift/latest/dg/r_comparison_condition.html) sind LIKE-Operatoren [vorzuziehen](https://docs.aws.amazon.com/redshift/latest/dg/r_patternmatching_condition_like.html). `LIKE`Operatoren sind immer noch [SIMILAR TO](https://docs.aws.amazon.com/redshift/latest/dg/pattern-matching-conditions-similar-to.html) - oder [POSIX-Operatoren](https://docs.aws.amazon.com/redshift/latest/dg/pattern-matching-conditions-posix.html) vorzuziehen.

## Verwenden Sie Sortierschlüssel in GROUP BY-Klauseln
<a name="group-by-clauses"></a>

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
<a name="materialized-views"></a>

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](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-overview.html).

## Seien Sie vorsichtig mit Spalten in den Klauseln GROUP BY und ORDER BY
<a name="group-by-order-by"></a>

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
```