Cette page a été traduite par l'API Cloud Translation.
Switch to English

Optimiseur de requêtes

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

L'optimiseur de requêtes SQL 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 manière précise d'obtenir ces données. Le processus de transformation d'une instruction déclarative en plan d'exécution de requêtes implique l'exécution de transformations sur des structures d'arbres utilisées pour représenter la requête. Il est attendu que l'optimiseur, dans le processus de production d'un plan d'exécution, conserve le sens logique de la requête SQL d'origine afin que les bonnes lignes soient renvoyées.

L'un des rôles importants de l'optimiseur est de concevoir un plan d'exécution efficace.

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

L'optimiseur de Cloud Spanner utilise une combinaison d'heuristiques bien établies et d'optimisations basées sur les coûts pour produire des plans efficaces. Certaines heuristiques sont très simples, telles que l'exécution de filtres sur des machines distantes plutôt que l'extraction de données sur la machine locale. D'autres méthodes heuristiques sont plus complexes, mais elles constituent toujours le principe de déplacement d'une logique visant à réduire le volume de données à proximité des données. Ce principe est particulièrement important dans un système qui partitionne les données sur plusieurs machines.

Certaines décisions d'exécution ne peuvent pas être prises efficacement à l'aide de telles règles fixes. L'optimiseur de Cloud Spanner prend également des décisions basées sur le coût estimé 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 produites par des fragments de la requête. Par exemple, Cloud Spanner évalue le nombre de lignes de la table "Songs" qui approuve le filtre SongGenre = "Pays" si ce filtre apparaît dans une requête. Pour faciliter le calcul de ces estimations, Cloud Spanner collecte régulièrement des statistiques sur les données utilisateur.

Pour en savoir plus sur les plans d'exécution de requêtes et leur utilisation par Cloud Spanner afin d'exécuter des requêtes 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 davantage de contrôle, nous vous offrons la possibilité de gérer la version de l'optimiseur de requêtes utilisée par vos requêtes. Avant de vous engager sur 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édicats REGEXP_CONTAINS et LIKE dans certaines circonstances.
  • Améliore les performances d'une analyse sous un prédicat GROUP BY dans certains cas.

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.