Optimizador de consultas

¿Qué es un optimizador de consultas?

El optimizador de consultas SQL de Cloud Spanner convierte una instrucción de SQL declarativa, que describe los datos que la consulta desea, en un plan de ejecución imperativo, que describe una forma de obtener esos datos con exactitud. El proceso de transformación de una instrucción declarativa en un plan de ejecución de consultas implica realizar transformaciones a estructuras de árbol usadas para representar la consulta. Se espera que el optimizador, en el proceso de producción de un plan de ejecución, conserve el significado lógico de la consulta de SQL original para que se muestren las filas correctas.

Otra función importante del optimizador es producir un plan de ejecución que sea eficiente.

¿Cómo produce el optimizador de Cloud Spanner los planes de ejecución eficientes?

El optimizador de Cloud Spanner usa una combinación de heurísticas bien establecidas y optimización basada en costos para producir planes eficientes. Algunas heurísticas son muy sencillas, como “realizar filtros en máquinas remotas en lugar de extraer datos a la máquina local”. Otras heurísticas son más complejas, pero aún representan el principio de mover la lógica que reduce el volumen de datos más cerca de los datos. Ese principio es muy importante en un sistema que fragmenta datos en varias máquinas.

No todas las decisiones de ejecución se pueden tomar de manera efectiva con esas reglas fijas, por lo que el optimizador de Cloud Spanner también toma decisiones basadas en un costo estimado de alternativas. Estas estimaciones de costos se calculan con la estructura de la consulta, el esquema de la base de datos y las estimaciones del volumen de datos que producirán los fragmentos de la consulta. Por ejemplo, Cloud Spanner calculará cuántas filas de la tabla Songs califican el filtro SongGenre = "País", si ese filtro aparece en una consulta. Para ayudar a calcular estas estimaciones, Cloud Spanner recopila estadísticas de forma periódica en los datos del usuario.

A fin de obtener más información sobre los planes de ejecución de consultas y cómo los usa Cloud Spanner para realizar consultas en un entorno distribuido, consulta Planes de ejecución de consultas.

Control de versiones del Optimizador de consultas

Con el tiempo, el optimizador de consultas evolucionará y ampliará el conjunto de opciones basadas en el costo y mejorará la precisión de las estimaciones que informan esas opciones, lo que llevará a planes de ejecución de consultas más eficientes.

Cloud Spanner implementa actualizaciones del optimizador como versiones nuevas del optimizador de consulta. De forma predeterminada, cada base de datos siempre usa la versión más reciente del optimizador. Para tener más control en tus manos, presentamos la capacidad de administrar la versión del optimizador de consultas que usan tus consultas. Antes de comprometerte con la última versión, puedes comparar perfiles de rendimiento de las consultas entre versiones anteriores y la más reciente. Para obtener más información, consulta Administra el optimizador de consultas.

Historial de versiones del optimizador de consultas

A continuación, se muestra un resumen de las actualizaciones realizadas con el optimizador de consultas en cada versión.

Versión 2: 1 de marzo de 2020 (más reciente)

  • Agrega optimizaciones en la selección de índices.
  • Mejora el rendimiento de los predicados REGEXP_CONTAINS y LIKE en ciertas circunstancias.
  • Mejora el rendimiento de un análisis con el valor GROUP BY en ciertas situaciones.

Versión 1: 18 de junio de 2019

  • Incluye muchas optimizaciones basadas en reglas, como el pushdown del predicado, el límite de pushdown, la unión redundante y la eliminación de expresiones redundantes, por nombrar algunas.

  • Usa las estadísticas de los datos del usuario a fin de seleccionar el índice que se usará para acceder a cada tabla.

A fin de administrar la versión del optimizador para tu situación, consulta Administra el optimizador de consultas.