Todos os produtos
Search
Central de documentação

Lindorm:Visão geral dos planos de consulta

Última atualização: Jun 28, 2026

Use a sintaxe EXPLAIN para inspecionar como o Lindorm SQL executa uma consulta. Os planos de consulta revelam o método de varredura de dados, a seleção de índice, as operações relacionais e o comportamento de push-down. Isso oferece visibilidade sobre as ações do mecanismo de consulta, permitindo diagnosticar problemas e ajustar o desempenho.

Os planos de consulta são compatíveis com LindormTable e LindormTSDB.

Como funciona

Ao receber uma consulta, o Lindorm SQL analisa o código SQL em uma árvore de sintaxe abstrata, reescreve-o em um plano lógico e aplica otimizações baseadas em regras ou custos para gerar um plano físico. O plano físico é a versão que realmente executa a operação: ele especifica quais operadores rodam no Lindorm SQL e quais operações sofrem push-down para o mecanismo de armazenamento.

O comando EXPLAIN permite inspecionar o plano em três níveis de profundidade:

Profundidade

Quando usar

Plano físico (padrão)

Diagnosticar problemas de desempenho: verifique qual índice foi selecionado, o intervalo de varredura e a ordem das operações

Plano lógico

Depurar questões semânticas: inspecione como o Lindorm SQL reescreve sua consulta antes da otimização

Plano de tipos

Verificar tipos de colunas: confirme o esquema de saída sem executar um plano completo

Níveis de profundidade do plano de consulta

Plano lógico

O plano lógico exibe a estrutura da consulta após a reescrita, mas antes da otimização. O Lindorm SQL o gera a partir da árvore de sintaxe abstrata e pode aplicar reescritas como:

  • Substituir uma expressão constante pelo valor calculado

  • Substituir AVG pelas expressões equivalentes SUM e COUNT

Use EXPLAIN WITHOUT IMPLEMENTATION FOR para visualizar o plano lógico:

EXPLAIN WITHOUT IMPLEMENTATION FOR
  SELECT LOCATE('9378', p1) AS lp, COUNT(c1)
  FROM (SELECT * FROM test WHERE p1 LIKE '3_%')
  GROUP BY lp
  ORDER BY lp;

Saída:

********************* 1. row *********************
PLAN: LogicalSort(sort0=[$0], dir0=[ASC])
  LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])
    LogicalProject(lp=[LOCATE('9378', $0)], c1=[$1])
      LogicalFilter(condition=[LIKE($0, '3_%')])
        LindormTableScan(table=[[db, test]])

Para consultar a sintaxe completa do EXPLAIN, consulte EXPLAIN.

Plano físico

O plano físico representa a versão otimizada e executável da consulta. O otimizador seleciona o melhor modo de execução com base em políticas de regras ou custos. Esta é a saída padrão do comando EXPLAIN e mostra o caminho completo de execução: quais operadores rodam no Lindorm SQL, quais operações sofrem push-down para o LindormTable ou LindormTSDB, o índice escolhido, o intervalo de varredura e as condições de filtro.

Use EXPLAIN FOR (ou apenas EXPLAIN) para visualizar o plano físico:

EXPLAIN
  SELECT LOCATE('9378', p1) AS lp, COUNT(c1)
  FROM (SELECT * FROM test WHERE p1 LIKE '3_%')
  GROUP BY lp
  ORDER BY lp;

Saída:

********************* 1. row *********************
PLAN: EnumerableSort(sort0=[$0], dir0=[ASC])
  EnumerableAggregate(group=[{0}], EXPR$1=[COUNT($1)])
    EnumerableCalc(expr#0..3=[{inputs}], expr#4=['9378'], expr#5=[LOCATE($t4, $t0)], lp=[$t5], c1=[$t1])
      EnumerableLindormDirectQuery(
explanation=[SELECT p1,c1,c2,c3 from test where ((p1 < 4) AND (p1 >= 3) AND (p1 LIKE 3_%)) supportEmptyResult true
Candidate tables:
    Data table: test, scores=1..0..1, need query back=false, sort type=FORWARD
Chose data table [test].
---
SELECT p1,c1,c2,c3 from test supportEmptyResult true
SingleScan on test
    ranges: [3\x00, 4\x00]
    filter: ((p1 < 4) AND (p1 >= 3) AND (p1 LIKE 3_%))
])

Plano de tipos

O plano de tipos contém apenas os tipos das colunas de saída para cada coluna no conjunto de resultados. Ele é gerado com base nos tipos da consulta e aplica-se a cenários específicos. Por ser o mais leve entre os três níveis de profundidade, é útil para verificar rapidamente o esquema de saída sem inspecionar toda a árvore de execução.

Use EXPLAIN WITH TYPE FOR para visualizar o plano de tipos:

EXPLAIN WITH TYPE FOR
  SELECT LOCATE('9378', p1) AS lp, COUNT(c1)
  FROM (SELECT * FROM test WHERE p1 LIKE '3_%')
  GROUP BY lp
  ORDER BY lp;

Saída:

********************* 1. row *********************
PLAN: lp INTEGER NOT NULL,
EXPR$1 BIGINT NOT NULL

Para obter a sintaxe completa do EXPLAIN, consulte EXPLAIN.

Operadores nos planos de consulta

Os operadores constituem os blocos fundamentais de um plano físico. Cada um representa uma etapa distinta na execução da consulta. O Lindorm SQL inclui operadores de uso geral para computação e um conjunto de operadores estendidos para push-down e operações específicas do mecanismo.

Operadores de uso geral

Estes operadores lidam com operações de computação executadas no Lindorm SQL, como classificação, agregação, projeção e cálculo.

EnumerableLimit

Ignora e trunca o conjunto de resultados com base nos valores de OFFSET e LIMIT. A saída do plano indica a origem dos valores de offset e fetch.

Quando aparece: Em qualquer consulta com cláusula LIMIT ou OFFSET.

EnumerableSort

Classifica o conjunto de resultados conforme a cláusula ORDER BY utilizando um algoritmo de ordenação baseado em treemap. A saída do plano mostra a chave de ordenação e a direção.

Quando aparece: Em consultas com ORDER BY nas quais a ordenação não pode ser atendida pela ordem de varredura da camada de armazenamento. Se EnumerableSort surgir no seu plano, adicionar um índice correspondente à coluna de ordenação pode eliminar esse operador.

EnumerableAggregate

Agrega linhas retornadas por operadores de nível inferior usando funções de agregação e colunas de agrupamento opcionais. Também processa a sintaxe DISTINCT. A saída do plano exibe a chave de agrupamento e as expressões de agregação.

Quando aparece: Em consultas com GROUP BY, funções de agregação (COUNT, SUM, AVG, etc.) ou DISTINCT.

EnumerableCalc

Avalia expressões — operações aritméticas, funções escalares (exceto funções de agregação e de janela) — e realiza projeção e filtragem nas linhas. Trata-se de um operador de computação de uso geral.

Quando aparece: Em consultas que aplicam expressões ou filtros sem push-down para o mecanismo de armazenamento.

Operadores estendidos

EnumerableLindormDirectQuery

Marca a parte da consulta que sofreu push-down para execução no mecanismo de armazenamento. O campo explanation descreve o que foi enviado via push-down e como o mecanismo de armazenamento processou a solicitação. O conteúdo de explanation varia conforme o mecanismo:

LindormTable

Campo

Descrição

Candidate tables

Índices candidatos avaliados, com suas respectivas pontuações

Chose data table

Índice selecionado para a consulta

Scan type

Método de varredura (por exemplo, SingleScan, RangeScan)

ranges

Intervalo de chaves percorrido na varredura

filter

Condições de filtro aplicadas durante a varredura

LindormTSDB

O campo explanation contém os parâmetros da chamada de API do LindormTSDB invocada para a consulta.

Operadores estendidos para LindormTSDB

Estes operadores são específicos para consultas do LindormTSDB.

TSDBDataScanRel

Uma variante de LogicalTableScan que executa operações de varredura de métricas. A saída do plano inclui:

  • filter — condições de filtro aplicadas à varredura

  • project — mapeamento de colunas entre o operador e a tabela de séries temporais

  • hint — hints transmitidos junto com a varredura, como _l_series_only

Quando aparece: Em qualquer consulta que leia dados de uma tabela de métricas do LindormTSDB.

TSDBShowTagRel

Otimiza consultas que recuperam todos os valores de uma coluna de tag específica, equivalente à sintaxe SHOW TAG VALUES do InfluxDB. Este operador surge no nível mais baixo da árvore do plano e indica que o mecanismo de armazenamento lida diretamente com a enumeração de tags.

Quando aparece: Exclusivamente em consultas no formato SELECT DISTINCT <tagkey column> FROM <table>.

TSDBAggScanRel

Operador combinado que une EnumerableAggregation e TSDBDataScanRel em uma única etapa de push-down para agregar dados de séries temporais.

Quando aparece: Em consultas que agregam dados de séries temporais quando tanto a varredura quanto a agregação podem sofrer push-down para o LindormTSDB.

EnumerableDownsampleQuery

Processa consultas que utilizam a sintaxe SAMPLE BY, uma extensão do Lindorm SQL para reduzir a amostragem (downsampling) de dados de séries temporais no LindormTSDB. Como SAMPLE BY é um dialeto SQL não padrão, possui seu próprio operador lógico (LogicalDownsampleQuery) e operador físico (EnumerableDownsampleQuery). A saída do plano inclui:

  • project — mapeamento de colunas entre o operador e o plano de nível superior

  • filter — condições de filtro enviadas via push-down junto com a operação de downsampling

  • ds_agg — função de downsampling e seus parâmetros

  • aggregator — operadores de agregação enviados via push-down para agregação entre séries temporais

  • hint — hints enviados via push-down para o LindormTSDB

Quando aparece: Apenas em consultas que usam a sintaxe SAMPLE BY.

Próximos passos

  • EXPLAIN — referência completa de sintaxe para todas as variantes do EXPLAIN