Réécriture automatique des requêtes - AWS Conseils prescriptifs

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.

Réécriture automatique des requêtes

Amazon Redshift peut réécrire automatiquement les requêtes SQL qui ne font pas explicitement référence à des vues matérialisées existantes utilisées pour améliorer les performances. L'interrogation directe d'une vue matérialisée réduit le temps de traitement de la requête, mais l'instruction de la requête doit être modifiée. Si vous utilisez des vues matérialisées pour accélérer les requêtes, il est important de réfléchir à la manière d'utiliser systématiquement et automatiquement des vues matérialisées pour répondre aux requêtes. Vous pouvez utiliser la réécriture transparente pour ajouter ou supprimer des vues matérialisées de la même manière qu'un index, sans affecter les instructions SQL existantes. Amazon Redshift utilise uniquement des vues up-to-date matérialisées lorsqu'il réécrit automatiquement les requêtes.

Fonctionnement de la réécriture de requêtes

Considérez la requête SQL suivante. La requête joint deux tableaux : client (plus de 10 millions de lignes) et commande (plus de 10 milliards de lignes) :

SELECT c.cust_id, c.first_name, sum(o.amount) as total_amount FROM orders o JOIN customer c ON c.cust_id = o.customer_id GROUP BY c.cust_id, c.first_name HAVING sum(o.amount) > 500;

Cette requête joint deux grands tableaux, applique une agrégation de somme sur la colonne o.amount, puis filtre les résultats pour afficher uniquement les clients dont la commande dépasse 500 USD. Cette requête peut consommer beaucoup de ressources.

À titre d'exemple, considérez la vue matérialisée mv_total_orders de la section Création de vues matérialisées de ce guide. Une fois cette vue créée, Amazon Redshift réécrit automatiquement la requête précédente comme suit :

SELECT cust_id, first_name, total_amount FROM mv_total_orders WHERE total_amount > 500;

Cette nouvelle requête s'exécute beaucoup plus rapidement, car elle utilise une vue matérialisée au lieu de joindre deux grands tableaux.

La réécriture des requêtes a conduit à une adoption plus large des vues matérialisées pour les raisons suivantes :

  1. Les vues matérialisées permettent la réécriture transparente des requêtes. La réécriture des requêtes transforme une instruction SQL exprimée en termes de tableaux en une instruction accédant à une ou plusieurs vues matérialisées. Cette transformation est transparente pour l'utilisateur final, ne nécessite aucune intervention et aucune référence à la vue matérialisée dans l'instruction SQL.

  2. Les vues matérialisées simplifient l'application des ensembles de résultats communs mis en cache et prennent en charge les optimisations des requêtes croisées telles que le calcul préalable.

  3. Dans les entrepôts des données et les scénarios d'intégration de données, les vues matérialisées peuvent matérialiser les résultats des tableaux étrangers afin de masquer les différences entre plusieurs sources de données, en implémentant des réplicas locaux ou la répartition lecture/écriture.

  4. La fonctionnalité de réécriture des requêtes associée à la création automatique de vues matérialisées accélère l'autonomie de la base de données.