Optimisez vos requêtes - Amazon Athena

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.

Optimisez vos requêtes

Utilisez les suggestions de cette section pour optimiser vos SQL requêtes dans Athena.

À utiliser LIMIT avec la clause ORDER BY

La clause ORDER BY renvoie les données dans un ordre trié. Cela oblige Athena à envoyer toutes les lignes de données à un seul composant master, puis à trier les lignes. Ce type de requête peut s'exécuter pendant une longue période, voire échouer.

Pour une plus grande efficacité dans vos requêtes, regardez en haut ou en bas N valeurs, puis utilisez également une LIMIT clause. Cela réduit considérablement le coût du tri en poussant le tri et la limitation vers des composants master individuels plutôt qu'à un seul composant master.

Optimisez les JOIN clauses

Lorsque vous joignez deux tables, Athena répartit la table de droite sur les composants master, puis diffuse la table de gauche pour effectuer la jointure.

Pour cette raison, spécifiez la table la plus grande du côté gauche de la jointure et la plus petite du côté droit de la jointure. De cette manière, Athena utilise moins de mémoire et exécute la requête avec une latence plus faible.

Notez également les points suivants :

  • Lorsque vous utilisez plusieurs commandes JOIN, spécifiez les tables de la plus grande à la plus petite.

  • Évitez les jointures croisées, sauf si elles sont requises par la requête.

Optimisez GROUP les clauses BY

L'opérateur GROUP BY répartit les lignes en fonction des colonnes GROUP BY sur les composants master. Ces colonnes sont référencées en mémoire et les valeurs sont comparées au fur et à mesure que les lignes sont ingérées. Les valeurs sont agrégées lorsque la colonne GROUP BY correspond. Compte tenu du fonctionnement de ce processus, il est conseillé d'ordonner les colonnes de la cardinalité la plus élevée à la plus faible.

Utiliser des nombres au lieu des chaînes

Comme les nombres nécessitent moins de mémoire et sont plus rapides à traiter que les chaînes, utilisez des nombres plutôt que des chaînes lorsque cela est possible.

Limiter le nombre de colonnes

Pour réduire la quantité totale de mémoire requise pour stocker vos données, limitez le nombre de colonnes spécifié dans votre instruction SELECT.

Utilisez des expressions régulières au lieu de LIKE

Les requêtes qui incluent des clauses, par exemple LIKE '%string%' sur de grandes chaînes, peuvent être très gourmandes en calculs. Lorsque vous filtrez plusieurs valeurs sur une colonne de chaîne, utilisez plutôt la fonction regexp_like() et une expression régulière. Cela est particulièrement utile lorsque vous comparez une longue liste de valeurs.

Utilisez la LIMIT clause

Au lieu de sélectionner toutes les colonnes lorsque vous exécutez une requête, utilisez la clause LIMIT pour renvoyer uniquement celles dont vous avez besoin. Cela réduit la taille du jeu de données traité via le pipeline d'exécution des requêtes. Les clauses LIMIT sont plus utiles lorsque vous interrogez des tables comportant un grand nombre de colonnes basées sur des chaînes. Les clauses LIMIT sont également utiles lorsque vous effectuez plusieurs jointures ou agrégations sur une requête.