Servidor Couchbase

Asesor de índices para la declaración de consulta N1QL

Visión general

Index advisor se introduce en Couchbase server 6.5 como una función de vista previa para desarrolladores. Su objetivo es proporcionar recomendaciones de índices secundarios para ayudar a los administradores de bases de datos y desarrolladores a optimizar el rendimiento de las consultas N1QL. Esta versión está basada en reglas, en la que los índices candidatos serán generados siguiendo las reglas de diseño especificadas en https://www.couchbase.com/blog/create-right-index-get-right-performance/:

1. Clave de índice de matriz principal para unnest

2. Predicados de igualdad

3. Predicados IN

4. Predicados no menor que/entre/no mayor que

5. Predicados menor que/mayor que

6. Predicados de matriz

7. Filtro de unión derivado como clave principal para el espacio de claves del lado izquierdo

8. Predicados IS NOT NULL/MISSING/VALUED

9. Predicados funcionales

10. Condición de índice parcial

El asesor de índices está diseñado para funcionar de dos maneras:

    • Declaración N1QL para aconsejar índices para una sola consulta.
    • Función de asesor para aconsejar sobre la carga de trabajo de las consultas y apoyar la gestión de las sesiones.

Este artículo se centra en la primera función y explica cómo funciona internamente.

Detalles de la declaración ADVISE

Sintaxis de la sentencia N1QL:

ADVISE [INDEX ] (consulta)

Admite los tipos de consulta SELECT/DELETE/UPDATE/ANSI MERGE, y proporciona recomendaciones de índices para operaciones en un único espacio de claves, ANSI JOIN/NEST, INDEX JOIN/NEST, UNNEST y subconsultas en la cláusula FROM.

Las principales directrices que sigue Index Advisor son:

    1. Generar candidatos a índices secundarios basados en predicados indexables, proyecciones, expresiones GROUP BY/ORDER BY con la sintaxis correcta.
    2. Ordene las claves de índice siguiendo las reglas con respecto al orden de prioridad de los tipos de predicado con ajuste en la clave de índice de matriz principal para UNNEST y filtro ISNOTNULL derivado para ANSI JOIN.
    3. Asegúrese de que el índice recomendado sea superior a todos los índices actuales existentes o diferidos y sea seleccionado por el optimizador de consultas basado en reglas actuales en la ejecución de la consulta.

Veamos primero el resultado de un ejemplo sencillo:

Consulta 1:

Hay dos partes en la salida de asesoramiento:

  • Índices actuales:

Esta sesión proporciona información sobre los índices utilizados actualmente por el optimizador de consultas para ejecutar la consulta de entrada. También incluirá información sobre el estado del índice si es idéntico al índice recomendado o si se trata de un índice de cobertura óptimo. En ambas situaciones, no se proporcionará ninguna recomendación de índice.

  • Índices recomendados:
    • Índices:

Esta sesión enumera los índices recomendados en función de los predicados de la cláusula WHERE/ON, junto con la regla de recomendación correspondiente que sigue cada índice.

    • Índices de cobertura:

Esta sesión enumera los índices de cobertura aplicables a la consulta de entrada.

Índices parciales

El modelo de datos de Couchbase es JSON con un esquema flexible, y un bucket puede ser heterogéneo con múltiples tipos de documentos en su interior. Normalmente, las entradas de datos incluyen un campo "tipo" para su categorización. Cuando una consulta incluye filtros sobre un tipo particular de documentos, se dará un índice parcial con el campo "tipo" en la cláusula WHERE. Esto puede ayudar a minimizar el tamaño del índice, acortar la ruta de acceso al índice y ejecutar la consulta de forma más eficiente.

En el ejemplo de consulta anterior, el índice recomendado es un índice parcial con "tipo = 'ruta'" añadido en la cláusula WHERE, que sólo creará un índice sobre los documentos de tipo "ruta":

Internamente, el asesor de índices utiliza las estadísticas "flavor" de la sentencia INFER para hacer coincidir los campos del predicado y añadirlos a la condición del índice parcial.

Para obtener más ideas, ejecutemos una consulta con ANSI JOIN sobre múltiples tipos de documentos en la que se aconsejará un índice parcial con el campo "tipo" como condición de índice para cada espacio clave:

Consulta 2:

Índice de matriz para predicado de matriz

JSON es una estructura jerárquica compuesta por campos escalares anidados, objetos y matrices. La clave de índice de array puede profundizar en el array anidado y referenciar claramente los elementos o los campos del objeto que se necesita indexar. El asesor de índices recomendará el índice del array recorriendo recursivamente los enlaces y expresiones en CUALQUIER predicado de rango.

Consulta 3:

Dado que los usuarios tienen la flexibilidad de aplicar cualquier lógica y procesamiento adicional sobre los elementos y campos del objeto en el array para generar CUALQUIER Index advisor también se esforzará por dar soporte a aquellas funciones complejas, expresiones de array, condiciones booleanas, etc., tal y como se muestra en la siguiente consulta:

Consulta 4:

Índice de matriz para la operación UNNEST

UNNEST se utiliza para realizar una operación de unión del array anidado con su objeto padre. Cuando el predicado de esta operación se aplica a los elementos individuales del array anidado, un índice de array ayudará a optimizar la ejecución de la consulta.

El optimizador de consultas N1QL soporta el escaneo sin anidar y el escaneo de cobertura sin anidar cuando hay una clave de array principal apropiada con TODOS los elementos del array indexados en la definición del índice. El asesor de índices sigue esta regla para recoger las expresiones no anidadas y generar el índice del array de forma inversa para su recomendación. Veamos el siguiente ejemplo:

Consulta 5:

Índices de cobertura

Los índices de cobertura pueden proporcionar todos los datos necesarios para una consulta concreta y evitar la sobrecarga que supone obtener documentos del servicio de datos. El asesor de índices recomendará este índice de cobertura eficiente para la consulta de entrada, si procede, en los pasos siguientes:

    • En primer lugar, recopile las claves de índice de todos los predicados de la cláusula WHERE/ON.
    • A continuación, añada las expresiones de proyección y GROUP BY/ORDER BY restantes a la definición del índice y genere un candidato a índice de cobertura provisional.
    • Por último, pero no por ello menos importante, compruebe si las expresiones de índice pueden proporcionar todos los datos necesarios para cubrir la consulta utilizando el mismo enfoque que para el optimizador de consultas.

Los ejemplos de consulta anteriores han mostrado que los índices de cobertura y los índices de matriz de cobertura se proporcionan para la consulta de espacio de clave única, la operación JOIN, las expresiones ANY y los predicados UNNEST.

Convención de nomenclatura de índices

En el asesor de índices, el nombre del índice está diseñado para cumplir tres requisitos:

    1. Refleje la construcción del índice conectando todas las claves del índice con guión bajo.
    2. Se diferencia de los índices definidos por el usuario añadiendo el prefijo "adv-".
    3. Longitud razonable truncando y sustituyendo por código hash.

A continuación se enumeran los formatos para el índice normal y el índice de matriz:

  • adv_field1_field2_field3...
  • adv_[DISTINTO/ALL]_nivel1_nivel2_nivel3...

Los nombres duplicados no están soportados en la indexación de Couchbase, y el asesor de índices no garantiza la unicidad del nombre del índice en la recomendación. Los usuarios necesitan cambiar el nombre del índice al encontrar este error.

Resumen

El asesor de índices (sentencia ADVISE) proporciona recomendaciones de índices para una única consulta. Aconseja el índice regular, el índice parcial, el índice de matriz y el índice de cobertura, y proporciona información sobre la regla de recomendación correspondiente que sigue cada clave de índice. Además, evalúa los índices utilizados actualmente en una consulta y evita hacer recomendaciones innecesarias.

Lanzado como función DP, el asesor de índices se encuentra aún en su fase inicial. Su funcionalidad y facilidad de uso se seguirán mejorando para satisfacer mejor las necesidades de los clientes y contribuir a la optimización de las consultas.

Recursos

Nos encantaría que nos dijera qué le han parecido las funciones de la versión 6.5 y en qué beneficiarán a su empresa en el futuro. Por favor, comparta su opinión a través de los comentarios o en el foro.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Chang Liu

Ingeniero de software en el equipo de consulta N1QL

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.