Otimizador de consultas

O que é um otimizador de consultas?

O otimizador de consultas SQL do Cloud Spanner converte uma instrução SQL declarativa que descreve quais dados a consulta quer, em um plano de execução imprescindível, que descreve uma maneira de obter esses dados com precisão. O processo de transformação de uma declaração declarativa em um plano de execução de consulta envolve a realização de transformações em estruturas de árvore usadas para representar a consulta. É esperado que o otimizador, no processo de produção de um plano de execução, mantenha o significado lógico da consulta SQL original para que as linhas corretas sejam retornadas.

Outra função importante do otimizador é produzir um plano de execução eficiente.

Como o otimizador do Cloud Spanner produz planos de execução eficientes?

O otimizador do Cloud Spanner usa uma combinação de heurística bem estabelecida e otimização baseada em custos para produzir planos eficientes. Algumas heurísticas são muito simples, como "executar filtros em máquinas remotas em vez de extrair dados para a máquina local". Outras heurísticas são mais complexas, mas ainda incorporam o princípio de mover a lógica que reduz o volume de dados mais perto dos dados. Esse princípio é particularmente importante em um sistema que fragmenta dados em várias máquinas.

Nem todas as decisões de execução podem ser tomadas de maneira eficaz usando essas regras fixas. Portanto, o otimizador do Cloud Spanner também toma decisões com base em um custo estimado de alternativas. Essas estimativas de custo são calculadas usando a estrutura da consulta, o esquema do banco de dados e as estimativas do volume de dados que serão produzidos por fragmentos da consulta. Por exemplo, o Cloud Spanner estimará quantas linhas da tabela de músicas qualificam o filtro SongGenre = "País" se esse filtro aparecer em uma consulta. Para ajudar no cálculo dessas estimativas, o Cloud Spanner coleta periodicamente estatísticas sobre os dados do usuário.

Para saber mais sobre planos de execução de consulta e como eles são usados pelo Cloud Spanner para executar consultas em um ambiente distribuído, consulte Planos de execução de consulta.

Controle de versão do otimizador de consultas

Com o tempo, o Otimizador de consultas evoluirá, ampliando o conjunto de opções no plano de execução de consulta e melhorando a precisão das estimativas que informam essas escolhas, levando a planos de execução de consulta mais eficientes.

O Cloud Spanner implementa as atualizações do otimizador como novas versões do otimizador de consultas. Por padrão, cada banco de dados sempre usa a versão mais recente do otimizador. Para ter mais controle, apresentamos a capacidade de gerenciar a versão do Otimizador de consultas que suas consultas usam. Antes de se comprometer com a versão mais recente, você pode comparar perfis de desempenho de consulta entre versões mais antigas e mais recentes. Para saber mais, consulte Gerenciar o Otimizador de consultas.

Histórico de versões do otimizador de consultas

Veja a seguir um resumo das atualizações feitas no otimizador de consultas em cada versão.

Versão 2: 1º de março de 2020 (mais recente)

  • Adiciona otimizações na seleção do índice.
  • Melhora o desempenho dos predicados REGEXP_CONTAINS e LIKE em determinadas circunstâncias.
  • Aprimora o desempenho de uma verificação em um GROUP BY em determinadas situações.

Versão 1: 18 de junho de 2019

  • Inclui muitas otimizações baseadas em regras, como pushdown de predicado, pushdown de limite, junção redundante e remoção de expressão redundante, para citar alguns.

  • Usa estatísticas nos dados do usuário para selecionar qual índice usar para acessar cada tabela.

Para gerenciar a versão do otimizador para seu cenário, consulte Gerenciar o otimizador de consultas