Optimiseur de requêtes

Qu'est-ce qu'un optimiseur de requêtes ?

L'optimiseur de requêtes SQL de Cloud Spanner convertit une instruction SQL déclarative, qui décrit les données souhaitées par la requête, en un plan d'exécution impératif, qui décrit une façon d'obtenir précisément ces données. Le processus de transformation d'une instruction déclarative en plan d'exécution de requêtes implique la transformation de structures arborescentes utilisées pour représenter la requête. Il est prévu que l'optimiseur, lors du processus de création d'un plan d'exécution, conserve la signification logique de la requête SQL d'origine afin que les lignes correctes soient renvoyées.

Un autre rôle important de l'optimiseur est de produire un plan d'exécution efficace.

Comment l'optimiseur Cloud Spanner génère-t-il des plans d'exécution efficaces ?

L'optimiseur Cloud Spanner utilise une combinaison de méthodes heuristiques bien établies et d'optimisation basée sur les coûts pour produire des plans efficaces. Certaines méthodes heuristiques sont très simples, telles que "effectuer des filtres sur des machines distantes plutôt que d'extraire des données sur la machine locale". D'autres méthodes heuristiques sont plus complexes, mais incarnent toujours le principe de déplacement de la logique qui réduit le volume de données plus près des données. Ce principe est particulièrement important dans un système qui segmente des données sur plusieurs machines.

Toutes les décisions d'exécution ne peuvent pas être prises efficacement à l'aide de telles règles fixes. L'optimiseur Cloud Spanner prend également des décisions basées sur une estimation du coût des alternatives. Ces estimations de coûts sont calculées à l'aide de la structure de la requête, du schéma de la base de données et des estimations du volume de données qui seront générées par des fragments de la requête. Par exemple, Cloud Spanner estimera le nombre de lignes de la table "Titres" qui qualifient le filtre SongGenre = "Country" si ce filtre apparaît dans une requête. Pour faciliter le calcul de ces estimations, Cloud Spanner recueille régulièrement des statistiques sur les données utilisateur.

Pour en savoir plus sur les plans d'exécution de requêtes et sur la manière dont Cloud Spanner les exécute dans un environnement distribué, consultez la page Plans d'exécution de requêtes.

Gestion des versions de l'optimiseur de requêtes

Au fil du temps, l'optimiseur de requêtes évoluera, élargissant la gamme de choix basés sur les coûts dans le plan d'exécution de requêtes et améliorant la précision des estimations qui informent ces choix, ce qui améliorera l'efficacité des plans d'exécution.

Cloud Spanner déploie les mises à jour de l'optimiseur en tant que nouvelles versions de l'optimiseur de requêtes. Par défaut, chaque base de données utilise toujours la dernière version de l'optimiseur. Pour vous donner plus de contrôle, nous avons ajouté la possibilité de gérer la version de l'optimiseur de requêtes utilisée par vos requêtes. Avant de passer à la dernière version, vous pouvez comparer les profils de performances des requêtes entre les anciennes versions et la dernière version. Pour en savoir plus, consultez l'article Gérer l'optimiseur de requêtes.

Historique des versions de l'optimiseur de requêtes

Vous trouverez ci-dessous un récapitulatif des mises à jour apportées à l'optimiseur de requêtes dans chaque version.

Version 2 : 1er mars 2020 (dernière version)

  • Ajoute des optimisations dans la sélection d'index.
  • Améliore les performances des prédictions REGEXP_CONTAINS et LIKE dans certaines circonstances.
  • Améliore les performances d'une analyse sous GROUP BY dans certaines situations.

Version 1 : 18 juin 2019

  • Inclut de nombreuses optimisations basées sur des règles, telles que le pushdown de prédicat, le pushdown de limite, la jointure redondante et la suppression d'expressions redondantes.

  • Utilise des statistiques sur les données utilisateur pour sélectionner l'index à utiliser pour accéder à chaque table.

Pour gérer la version de l'optimiseur pour votre scénario, consultez la page Gérer l'optimiseur de requêtes.