Visão geral

O consultor de índices foi introduzido no servidor Couchbase 6.5 como um recurso de visualização para desenvolvedores. Seu objetivo é fornecer recomendação de índice secundário para ajudar os DBAs e os desenvolvedores a otimizar o desempenho da consulta N1QL. Essa versão é baseada em regras, nas quais os candidatos a índices serão gerados de acordo com as regras de design especificadas em https://www.couchbase.com/blog/create-right-index-get-right-performance/:

1. Chave de índice de matriz principal para unnest

2. Predicados de igualdade

3. Predicados IN

4. Predicados não menor que/entre/não maior que

5. Menos que/maior que predicados

6. Predicados de matriz

7. Filtro de junção derivado como chave principal para o espaço-chave do lado esquerdo

8. predicados IS NOT NULL/MISSING/VALUED

9. Predicados funcionais

10. Condição de índice parcial

O consultor de índices foi projetado para funcionar de duas maneiras:

    • Declaração N1QL para aconselhar índices para uma única consulta.
    • Função de consultor para aconselhar sobre a carga de trabalho da consulta e apoiar o tratamento da sessão.

Este artigo se concentrará na primeira função e compartilhará alguns insights sobre como ela funciona internamente.

Detalhes da declaração ADVISE

Sintaxe da declaração N1QL:

ADVISE [INDEX ]

Ele é compatível com os tipos de consulta SELECT/DELETE/UPDATE/ANSI MERGE e fornece recomendações de índice para operações em um único espaço de chave, ANSI JOIN/NEST, INDEX JOIN/NEST, UNNEST e subconsulta na cláusula FROM.

As principais diretrizes que o Index Advisor segue são:

    1. Gerar candidatos a índices secundários com base em expressões de predicado indexável, projeção, GROUP BY/ORDER BY com a sintaxe correta.
    2. Classifique as chaves de índice seguindo as regras de acordo com a ordem de prioridade dos tipos de predicado com ajuste na chave de índice da matriz principal para UNNEST e filtro ISNOTNULL derivado para ANSI JOIN.
    3. Certifique-se de que o índice recomendado seja superior a todos os índices existentes/diferidos atuais e seja selecionado pelo otimizador de consultas baseado em regras atual na execução da consulta.

Primeiramente, vamos dar uma olhada no resultado de um exemplo simples:

Consulta 1:

Há duas partes no resultado do aconselhamento:

  • Índices atuais:

Essa sessão fornece as informações sobre os índices usados atualmente pelo otimizador de consultas para executar a consulta de entrada. Ela também incluirá informações sobre o status do índice se ele for idêntico ao índice recomendado ou se for um índice de cobertura ideal. Em ambas as situações, nenhuma recomendação de índice será fornecida.

  • Índices recomendados:
    • Índices:

Essa sessão lista os índices recomendados com base nos predicados da cláusula WHERE/ON, juntamente com a regra de recomendação correspondente que cada índice segue.

    • Índices de cobertura:

Essa sessão lista os índices de cobertura que se aplicam à consulta de entrada.

Índices parciais

O modelo de dados do Couchbase é JSON com esquema flexível, e um bucket pode ser heterogêneo com vários tipos de documentos dentro dele. Normalmente, as entradas de dados incluem um campo "type" para categorização. Quando uma consulta inclui filtros em um tipo específico de documentos, será fornecido um índice parcial com o campo "type" na cláusula WHERE. Isso pode ajudar a minimizar o tamanho do índice, encurtar o caminho de acesso ao índice e executar a consulta com mais eficiência.

No exemplo de consulta acima, o índice recomendado é um índice parcial com "type = 'route'" adicionado na cláusula WHERE, que criará um índice somente nos documentos do tipo "route":

Internamente, o consultor de índice usa as estatísticas "flavor" da instrução INFER para corresponder aos campos no predicado e adicioná-los à condição de índice parcial.

Para ter mais ideias, vamos executar uma consulta com ANSI JOIN em vários tipos de documentos, na qual um índice parcial com o campo "type" (tipo) como condição de índice será recomendado para cada espaço-chave:

Consulta 2:

Índice de matriz para Predicado de matriz

O JSON é uma estrutura hierárquica composta de campos escalares aninhados, objetos e matrizes. A chave de índice de matriz pode se aprofundar na matriz aninhada e fazer referência clara aos elementos ou aos campos do objeto que precisa ser indexado. O Index advisor recomendará o índice da matriz percorrendo recursivamente as ligações e expressões em QUALQUER predicado de intervalo.

Consulta 3:

Como os usuários têm flexibilidade para aplicar qualquer lógica e processamento adicionais nos elementos e campos do objeto na matriz para gerar QUALQUER o Index advisor também se esforçará para oferecer suporte a essas funções complexas, expressões de matriz, condições booleanas etc., conforme mostrado na consulta abaixo:

Consulta 4:

Índice da matriz para a operação UNNEST

UNNEST é usado para executar uma operação de união da matriz aninhada com seu objeto pai. Quando o predicado dessa operação se aplica aos elementos individuais da matriz aninhada, um índice de matriz ajudará a otimizar a execução da consulta.

O otimizador de consultas N1QL oferece suporte à varredura sem aninhamento e à varredura de cobertura sem aninhamento quando há uma chave de matriz principal apropriada com TODOS os elementos da matriz indexados na definição do índice. O consultor de índices segue essa regra para coletar expressões unnest e gerar o índice de matriz de forma inversa para recomendação. Vamos dar uma olhada no exemplo abaixo:

Consulta 5:

Índices de cobertura

Os índices de cobertura podem fornecer todos os dados necessários para uma determinada consulta e evitar a sobrecarga na busca de documentos do serviço de dados. O consultor de índices aconselhará esse índice de cobertura eficiente para a consulta de entrada, se aplicável, nas etapas a seguir:

    • Primeiro, colete as chaves de índice de todos os predicados na cláusula WHERE/ON.
    • Em seguida, anexe as expressões de projeção e GROUP BY/ORDER BY restantes à definição do índice e gere um candidato a índice de cobertura provisório.
    • Por último, mas não menos importante, verifique se as expressões de índice podem fornecer todos os dados necessários para cobrir a consulta usando a mesma abordagem do otimizador de consultas.

Os exemplos de consulta anteriores mostraram que os índices de cobertura e os índices de matriz de cobertura são fornecidos para consulta de espaço de chave único, operação JOIN, expressões ANY e predicados UNNEST.

Convenção de nomenclatura de índices

No consultor de índices, o nome do índice é projetado para atender a três requisitos:

    1. Reflita a construção do índice conectando todas as chaves de índice com sublinhado.
    2. Diferencie os índices definidos pelo usuário adicionando o prefixo "adv-".
    3. Comprimento razoável, truncando e substituindo por código hash.

Os formatos para índice regular e índice de matriz estão listados abaixo:

  • adv_field1_field2_field3...
  • adv_[DISTINCT/ALL]_level1_level2_level3...

Nomes duplicados não são suportados na indexação do Couchbase, e o consultor de índices não garante a exclusividade do nome do índice na recomendação. Os usuários precisam alterar o nome do índice ao encontrar esse erro.

Resumo

O consultor de índices (instrução ADVISE) fornece recomendações de índices para uma única consulta. Ele aconselha o índice regular, o índice parcial, o índice de matriz e o índice de cobertura e fornece informações sobre a regra de recomendação correspondente que cada chave de índice segue. Além disso, ele avalia os índices usados atualmente por uma consulta e evita recomendações desnecessárias.

Lançado como um recurso de DP, o index advisor ainda está em seus estágios iniciais. A funcionalidade e a usabilidade serão aprimoradas para atender melhor às necessidades dos clientes e contribuir para a otimização das consultas.

Recursos

Gostaríamos muito de saber se você gostou dos recursos da versão 6.5 e como ela beneficiará sua empresa no futuro. Compartilhe seu feedback por meio dos comentários ou na seção fórum.

Autor

Postado por Chang Liu

Engenheiro de software na equipe de consultas N1QL

Deixar uma resposta