Choix des clés de tri - Amazon Redshift

Choix des clés de tri

Lorsque vous créez une table, vous pouvez définir une ou plusieurs de ses colonnes comme clés de tri. Lorsque les données sont chargées initialement dans la table vide, les lignes sont stockées sur le disque dans un ordre trié. Les informations sur les colonnes de clés de tri sont transmises au planificateur de requête qui les utilise pour créer des plans basés sur le mode de tri des données.

Le tri permet de faire un tri efficace des prédicats à plage restreinte. Amazon Redshift stocke les données en colonnes dans des blocs de disque de 1 Mo. Les valeurs minimale et maximale de chaque bloc sont stockées dans le cadre des métadonnées. Si la requête utilise un prédicat à plage restreinte, le processeur de requêtes peut utiliser les valeurs min et max pour ignorer rapidement un grand nombre de blocs lors des analyses de table. Par exemple, si une table stocke cinq ans de données triées par date et qu'une requête spécifie une plage de dates d'un mois, près de 98 pour cent des blocs du disque peuvent être éliminés de l'analyse. Si les données ne sont pas triées, davantage de blocs de disque (peut-être même tous) doivent être analysés.

Vous pouvez spécifier une clé de tri composée ou une clé de tri entrelacée. Une clé de tri composée est plus efficace lorsque les prédicats de requête utilisent un préfixe, qui est un sous-ensemble des colonnes de clé de tri dans l'ordre. Une clé de tri entrelacée confère un poids égal à chaque colonne de la clé de tri, les prédicats de requête peuvent donc utiliser n'importe quel sous-ensemble des colonnes qui constituent la clé de tri, dans n'importe quel ordre. Pour obtenir des exemples d'utilisation des clés de tri composées et des clés de tri entrelacées, consultez Comparaison des styles de tri.

Pour comprendre l'incidence de la clé de tri choisie sur la performance des requêtes, utilisez la commande EXPLAIN. Pour plus d'informations, consultez Workflow d'exécution et de planification de requête

Pour définir un type de tri, utilisez le mot clé INTERLEAVED ou COMPOUND avec votre instruction CREATE TABLE ou CREATE TABLE AS. La valeur par défaut est COMPOUND. Une clé de tri INTERLEAVED peut utiliser huit colonnes au maximum.

Pour afficher les clés de tri d'une table, interrogez la vue système SVV_TABLE_INFO.

Clé de tri composée

Une clé de tri composée est constituée de toutes les colonnes répertoriées dans la définition de clé de tri, dans leur ordre d'apparition. Une clé de tri composée est très utile lorsqu'un filtre de requête applique des conditions, telles que des filtres et des jointures, qui utilisent un préfixe de clés de tri. Les avantages du tri composé en termes de performances diminuent lorsque les requêtes dépendent seulement de colonnes de tri secondaires, sans référence aux colonnes principales. COMPOUND est le type de tri par défaut.

Les clés de tri composées peuvent augmenter la vitesse des jointures, les opérations GROUP BY et ORDER BY et les fonctions de fenêtrage qui utilisent PARTITION BY et ORDER BY. Par exemple, une jointure par fusion, ce qui est souvent plus rapide qu'une jointure par hachage, est possible lorsque les données sont distribuées et pré-triées sur les colonnes de jointure. Les clés de tri composées permettent également d'améliorer la compression.

Lorsque vous ajoutez des lignes à une table triée contenant déjà des données, la région non triée se développe, ce qui a une incidence significative sur les performances. C'est encore plus flagrant lorsque la table utilise le tri entrelacé, en particulier lorsque les colonnes de tri incluent des données qui augmentent de façon uniforme, telles que les colonnes de date ou d'horodatage. Vous devez exécuter régulièrement une opération VACUUM, surtout après des charges de données volumineuses, pour trier et analyser à nouveau les données. Pour plus d'informations, consultez Gestion de la taille de la région non triée. Après avoir effectué une opération « vacuum » pour trier à nouveau les données, il est recommandé d'exécuter une commande ANALYZE pour mettre à jour les métadonnées statistiques pour le planificateur de requête. Pour plus d'informations, consultez Analyse des tables.

Clé de tri entrelacée

Un tri entrelacé confère un poids égal à chaque colonne, ou sous-ensemble de colonnes, de la clé de tri. Si plusieurs requêtes utilisent des colonnes différentes pour les filtres, vous pouvez souvent améliorer les performances de ces requêtes en utilisant un style de tri entrelacé. Quand une requête utilise des prédicats restrictifs sur les colonnes de tri secondaires, le tri entrelacé améliore considérablement les performances des requêtes par rapport à un tri composé.

Important

N'utilisez pas de clé de tri entrelacée sur les colonnes qui contiennent des attributs qui augmentent de façon monotone, tels que les colonnes d'identité, les dates ou les horodatages.

L'amélioration des performances que vous obtenez en mettant en œuvre une clé de tri entrelacée doit être comparée aux temps de charge et de vidage.

Les tris entrelacés sont plus efficaces avec des requêtes extrêmement sélectives qui filtrent une ou plusieurs colonnes de clés dans la clause WHERE, par exemple select c_name from customer where c_region = 'ASIA'. Les avantages du tri entrelacé augmentent avec le nombre de colonnes triées restreintes.

Un tri entrelacé est plus efficace avec des tables volumineuses. Un tri est appliqué à chaque tranche, un tri entrelacé est donc plus efficace lorsqu'une table est suffisamment volumineuse pour nécessiter plusieurs blocs de 1 Mo par tranche et que le processeur de requêtes est capable d'ignorer une grandie partie des blocs à l'aide de prédicats restrictifs. Pour afficher le nombre de blocs utilisés par une table, interrogez la vue système STV_BLOCKLIST.

Lorsque vous effectuez un tri sur une seule colonne, un tri entrelacé peut offrir de meilleures performances qu'un tri composé si les valeurs de la colonne ont un préfixe de commun. Par exemple, les URL qui commencent habituellement par « http://www ». Les clés de tri composées utilisent un nombre limité de caractères après le préfixe, ce qui se traduit par un grand nombre de duplications de clés. Les tri entrelacés utilisent un schéma de compression interne pour les valeurs de la carte de zone qui leur permet de mieux distinguer les valeurs de la colonne ayant un préfixe commun long.

VACUUM REINDEX

Lorsque vous ajoutez des lignes à une table triée contenant déjà des données, les performances peuvent se détériorer au fil du temps. Cette détérioration se produit pour les tris composés et entrelacés, mais elle a des conséquences plus graves sur les tables. Une commande VACUUM permet de restaurer l'ordre de tri, mais l'opération peut prendre plus de temps pour les tables entrelacées, car la fusion de nouvelles données entrelacées peut impliquer la modification de chaque bloc de données.

Lorsque les tables sont initialement chargées, Amazon Redshift analyse la distribution des valeurs dans les colonnes de clés de tri et utilise ces informations pour un entrelacement optimal des colonnes de clés. A mesure qu'une table se développe, la distribution des valeurs dans les colonnes de clés peut changer, ou se décaler, en particulier avec les colonnes de date ou d'horodatage. Si l'asymétrie devient trop grande, les performances peuvent en être affectées. Pour analyser à nouveau les clés de tri et restaurer les performances, exécutez la commande VACUUM avec le mot clé REINDEX. Du fait qu'il a besoin d'effectuer un passage d'analyse des données supplémentaire, VACUUM REINDEX peut prendre plus de temps qu'une commande VACUUM standard pour les tables entrelacées. Pour afficher des informations sur l'asymétrie de la distribution de clés et la durée de la dernière réindexation, interrogez la vue système SVV_INTERLEAVED_COLUMNS.

Pour plus d'informations sur la façon de déterminer la fréquence d'exécution de VACUUM et sur le moment d'exécution d'un VACUUM REINDEX, consultez Choix de réindexation.