

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Opérateurs EXPLAIN pour les plans de requêtes Amazon Redshift
<a name="explain-operators"></a>

Cette section décrit brièvement les opérateurs que vous voyez le plus souvent dans la `EXPLAIN` sortie.

## Scan séquentiel
<a name="sequential-scan"></a>

L’opérateur d’analyse séquentiel (Seq Scan) indique une analyse de table. Seq Scan analyse chaque colonne de la table de manière séquentielle du début à la fin et évalue les contraintes de requête (dans la `WHERE` clause) pour chaque ligne.

## Opérateurs de jointure
<a name="join-operators"></a>

Amazon Redshift sélectionne les opérateurs de jointure en fonction de la conception physique des tables jointes, de l’emplacement des données requises pour la jointure et des exigences spécifiques à la requête elle-même.

### Boucle imbriquée
<a name="join-nested-loop"></a>

Une boucle imbriquée est principalement utilisée pour les jointures croisées. Les jointures croisées sont des jointures sans condition de jointure qui entraînent le produit cartésien de deux tables. Les boucles imbriquées sont généralement exécutées sous forme de boucles imbriquées, qui sont les types de jointure les plus lents possibles. Si une boucle imbriquée est présente, vous pouvez voir un événement d'alerte de boucle imbriquée dans la vue [STL\_ALERT\_EVENT\_LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ALERT_EVENT_LOG.html). Vous pouvez exécuter la requête suivante pour identifier les requêtes comportant des boucles imbriquées :

```
select q.query, 
       trim(q.querytxt) as sql_query, 
       q.starttime 
from stl_query q
join stl_alert_event_log l
    on l.query = q.query
    and l.event like 'Nested Loop Join in the query plan%' 
order by q.starttime desc;
```

### Jointure par hachage et hachage
<a name="join-hash"></a>

La jointure par hachage et les opérateurs de hachage sont généralement plus rapides qu'une jointure par boucle imbriquée. Ces opérateurs sont utilisés pour les jointures intérieures et les jointures extérieures gauche et droite. Vous pouvez utiliser la jointure par hachage et les opérateurs de hachage lorsque vous joignez des tables dont les colonnes de jointure ne sont pas à la fois des clés de distribution et des clés de tri. L'opérateur de hachage crée la table de hachage pour la table interne dans la jointure. L'opérateur de jointure par hachage lit la table externe, hache la colonne de jointure et trouve des correspondances dans la table de hachage interne.

### Joindre par fusion
<a name="join-merge"></a>

L'opérateur de jointure par fusion est généralement la jointure la plus rapide et est utilisé pour les jointures internes et les jointures externes. La jointure par fusion n'est pas utilisée pour les jointures complètes. Vous pouvez utiliser une jointure par fusion lorsque vous joignez des tables dont les colonnes de jointure sont à la fois des clés de distribution et des clés de tri, et lorsque moins de 20 % des tables de jointure ne sont pas triées. L'opérateur de jointure par fusion lit deux tables triées dans l'ordre et trouve les lignes correspondantes. Pour voir le pourcentage de lignes non triées, interrogez la table système [SVV\_TABLE\_INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html).

## Opérateurs d’agrégation
<a name="aggregate-operators"></a>

Le plan de requête utilise les opérateurs suivants dans les requêtes impliquant des fonctions et des `GROUP BY` opérations d'agrégation :
+ **Agrégat** — Opérateur pour les fonctions d'agrégation scalaires telles que et `AVG` `SUM`
+ **HashAggregate**— Opérateur pour les fonctions d'agrégation groupées non triées
+ **GroupAggregate**— Opérateur pour les fonctions d'agrégation groupées triées

### Opérateurs de tri
<a name="operators-sort"></a>

Le plan de requête utilise les opérateurs suivants lorsque les requêtes doivent trier ou fusionner des ensembles de résultats :
+ **Trier** : évalue la `ORDER BY` clause et les autres opérations de tri, telles que les tris requis par les `UNION` requêtes et les jointures, les `SELECT DISTINCT` requêtes et les fonctions de fenêtre
+ **Merge** — Produit des résultats triés finaux en fonction des résultats triés intermédiaires issus d'opérations parallèles

### Opérateurs UNION, INTERSECT et EXCEPT
<a name="operators-union"></a>

Le plan de requête utilise les opérateurs suivants pour les requêtes impliquant des opérations définies avec `UNION``INTERSECT`, et `EXCEPT` :
+ **Sous-requête** : utilisée pour exécuter `UNION` des requêtes
+ **Hash Intersect Distinct** — Utilisé pour exécuter des requêtes `INTERSECT`
+ **SetOp Sauf** — Utilisé pour exécuter `EXCEPT` (ou`MINUS`) des requêtes

### Autres opérateurs
<a name="operators-other"></a>

Les opérateurs suivants apparaissent également fréquemment en `EXPLAIN` sortie pour les requêtes de routine :
+ **Unique** — Supprime les doublons pour les requêtes et les `SELECT DISTINCT` requêtes `UNION`
+ **Limite** — Traite la `LIMIT` clause
+ **Fenêtre** — Exécute les fonctions de fenêtre
+ **Résultat** — Exécute des fonctions scalaires qui n'impliquent aucun accès à une table
+ **Sous-plan** : utilisé pour certaines sous-requêtes
+ **Réseau** — Envoie les résultats intermédiaires au nœud principal pour un traitement ultérieur
+ **Materialize** — Enregistre les lignes pour les saisir dans les jointures par boucle imbriquées et dans certaines jointures par fusion