Todos os produtos
Search
Central de documentação

Tablestore:Otimização de consultas

Última atualização: Jul 03, 2026

O mecanismo SQL do Tablestore otimiza consultas selecionando o melhor índice para leitura de dados e realizando o pushdown de computações para a camada de índice.

Seleção de índice

Quando uma tabela de dados possui um Secondary index ou um Search index, o mecanismo SQL escolhe o caminho de leitura ideal antes de executar a consulta. A seleção do índice pode ocorrer automaticamente ou ser especificada manualmente.

Nota

Antes de utilizar a otimização de consultas, certifique-se de ter criado os mapeamentos da tabela de dados. Para mais informações, consulte DDL operations. Para acelerar consultas com um search index, crie também o search index e seu respectivo mapeamento.

Regras de seleção automática

Ao consultar um mapeamento de tabela de dados, o mecanismo SQL seleciona automaticamente um índice com base na seguinte prioridade:

Prioridade

Destino

Condição

1

Search index

Todas as colunas nas cláusulas WHERE, de agregação e ORDER BY são cobertas pelo mesmo search index.

Exemplo: SELECT A,B,C FROM t WHERE A=1 AND D=2; — Se as colunas A, B, C e D estiverem todas no mesmo search index, esse índice será selecionado.

2

Secondary index

O secondary index corresponde a mais colunas iniciais da chave primária na cláusula WHERE do que a tabela de dados (correspondência de prefixo mais à esquerda) e cobre todas as colunas da consulta.

Exemplo: A tabela de dados tem chaves primárias a e b. Um secondary index tem chaves primárias c, a e b. Para WHERE c = 1 AND a > 1, o secondary index corresponde a 2 colunas > a tabela de dados corresponde a 1 coluna.

3

Decisão do CBO

Caso nenhuma das regras anteriores se aplique, o mecanismo SQL utiliza o CBO interno (Otimizador Baseado em Custo) para escolher a opção de menor custo entre a tabela de dados e os secondary indexes.

Importante
  • Se o mapeamento estiver configurado com consistência forte ou exigir resultados de agregação exatos, o mecanismo SQL não selecionará automaticamente um search index.

  • Quando tanto um secondary index quanto um search index cobrem todas as colunas necessárias, o mecanismo SQL dá preferência ao search index.

Especificar manualmente um índice

Para utilizar um índice específico, especifique-o manualmente de uma das seguintes formas:

Sintaxe use index

Especifique um índice na instrução SELECT.

-- Force a full table scan (skip all indexes)
SELECT * FROM sampletable use index();

-- Use a search index
SELECT * FROM sampletable use index(sampletable_search_index);

-- Use a secondary index
SELECT * FROM sampletable use index(sampletable_secondary_index);
Nota

Caso o índice especificado não cubra as colunas necessárias, o mecanismo SQL lê automaticamente os dados ausentes diretamente da tabela de dados.

Tabela de mapeamento de índice

Consulte diretamente a tabela de mapeamento de um secondary index ou search index.

-- Query through a search index mapping table (only columns in the index are queryable)
SELECT col_a, col_b FROM search_index_mapping WHERE col_a > 10;
Nota

Consultas em uma tabela de mapeamento de índice retornam apenas as colunas incluídas nesse índice.

Recomendações

Cenário

Recomendação

Agregação, ordenação ou busca textual completa

Utilize a seleção automática (padrão). Garanta que o search index cubra todas as colunas necessárias. O mecanismo SQL encaminha a consulta para o search index e aplica o pushdown dos operadores automaticamente.

Filtros simples de igualdade ou intervalo com consistência forte

Opte por um secondary index. Secondary indexes suportam leituras fortemente consistentes quando dados em tempo real são obrigatórios.

A seleção automática gera resultados inesperados

Especifique manualmente um índice com use index(index_name). Essa abordagem é útil para ajuste de desempenho ou para corrigir decisões equivocadas do CBO.

Apenas colunas presentes no índice são necessárias

Consulte diretamente a tabela de mapeamento do índice para evitar leituras na tabela de dados.

Pushdown de computação

O mecanismo SQL envia os operadores suportados para a camada do search index, reduzindo o volume de dados que precisa processar.

Condições de ativação

O pushdown de computação exige que o search index cubra todas as colunas da instrução SQL, incluindo as colunas SELECT, WHERE, ORDER BY e GROUP BY. Se alguma coluna estiver ausente, o mecanismo SQL recorre a uma varredura completa da tabela.

-- Table has columns a, b, c, d. Search index covers a, b, c.

-- d is not in the search index → full table scan, no pushdown
SELECT a, b, c, d FROM exampletable;

-- All columns are in the search index → reads through search index, pushdown supported
SELECT a, b, c FROM exampletable;

Operadores suportados

Tipo de operador

Suporte a pushdown

Condições

Operadores lógicos

AND, OR

NOT não suporta pushdown.

Operadores relacionais

=, !=, <, <=, >, >=, BETWEEN...AND

Apenas comparações entre coluna e constante são suportadas. Comparações entre colunas não permitem pushdown, pois os search indexes criam índices independentes por coluna e não conseguem resolver comparações cruzadas na camada de índice.

Funções de agregação

MIN, MAX, COUNT, AVG, SUM, ANY_VALUE, COUNT(DISTINCT), GROUP BY

Os argumentos devem ser nomes de colunas, não expressões. COUNT(*) suporta pushdown.

Ordenação e paginação

ORDER BY col LIMIT n

Os argumentos do ORDER BY devem ser nomes de colunas. Expressões no ORDER BY não permitem pushdown.

Funções vetoriais

VECTOR_QUERY_FLOAT32

Todas as demais expressões na cláusula WHERE também devem atender às condições de pushdown. Caso alguma expressão não atenda, a consulta não poderá ser executada.

Antipadrões comuns

Antipadrão

Padrão corrigido

Motivo

WHERE a = '123'
WHERE a = 123

A coluna a é BIGINT. A incompatibilidade de tipos aciona um CAST implícito.

SELECT SUM(a+b)
SELECT SUM(a)+SUM(b)

O argumento da agregação é uma expressão.

GROUP BY a+1
GROUP BY a

O argumento do GROUP BY é uma expressão.

WHERE a > b

Não há reescrita equivalente. Aplique o filtro na camada da aplicação.

Comparação entre colunas.

ORDER BY a+1 LIMIT 10
ORDER BY a LIMIT 10

O argumento do ORDER BY é uma expressão.

Mapeamento entre expressões SQL e recursos do search index

A tabela a seguir associa expressões SQL aos recursos equivalentes de consulta do search index, facilitando a migração do SDK do search index para SQL.

Expressão SQL

Exemplo

Recurso do search index

Sem cláusula WHERE

SELECT * FROM t

MatchAllQuery

=

a = 1

TermQuery

>, >=, <, <=

a > 1

RangeQuery

IS NULL / IS NOT NULL

a IS NULL

ExistsQuery

AND / OR / NOT / !=

a = 1 AND b = 2

BoolQuery

LIKE

a LIKE "%s%"

WildcardQuery

IN

a IN (1,2,3)

TermsQuery

TEXT_MATCH

TEXT_MATCH(a, "hello")

MatchQuery

TEXT_MATCH_PHRASE

TEXT_MATCH_PHRASE(a, "hello world")

MatchPhraseQuery

ARRAY_EXTRACT

ARRAY_EXTRACT(col)

Array and Nested data types

NESTED_QUERY

NESTED_QUERY(expr)

NestedQuery

ORDER BY / LIMIT

ORDER BY a LIMIT 10

Sorting and paging

Funções de agregação / GROUP BY

SUM(col) / GROUP BY col

Aggregation