Todos os produtos
Search
Central de documentação

ApsaraDB for SelectDB:Aceleração baseada em índices

Última atualização: Jun 29, 2026

A varredura completa de tabelas é um dos principais gargalos para consultas analíticas em grandes conjuntos de dados. O ApsaraDB for SelectDB mantém duas categorias de índices para minimizar leituras desnecessárias: índices inteligentes integrados, criados e gerenciados automaticamente, e índices secundários, definidos para padrões específicos de consulta.

Categoria

Tipos de índice

Índices inteligentes integrados

Índice zone map, índice de prefixo

Índices secundários

Inverted index, Bitmap index, Bloom filter index, NGram Bloom filter index

Este tópico aborda os índices inteligentes integrados: seu funcionamento e como aproveitar ao máximo seus benefícios.

Índice zone map

O SelectDB cria e mantém automaticamente o índice zone map para cada coluna no formato de armazenamento colunar. Para cada coluna, o sistema registra:

  • Min: valor mínimo da coluna

  • Max: valor máximo da coluna

  • NULL count: quantidade de valores NULL na coluna

Quando uma consulta inclui um filtro de intervalo ou igualdade, o SelectDB compara o filtro com os limites Min–Max de cada coluna e ignora dados sem linhas correspondentes. Essa abordagem acelera significativamente consultas de intervalo e filtros de desigualdade em grandes conjuntos de dados.

O gerenciamento dos índices zone map ocorre automaticamente, sem necessidade de intervenção do usuário.

Índice de prefixo

Construção do índice de prefixo

O ApsaraDB for SelectDB é um banco de dados OLAP (processamento analítico online) com arquitetura MPP (processamento massivamente paralelo). Os dados residem em uma estrutura semelhante à SSTable (tabela de strings ordenadas): as linhas são classificadas e armazenadas conforme as colunas-chave definidas na criação da tabela.

Nos modelos Aggregate Key, Unique Key e Duplicate Key, a ordenação das linhas segue as colunas listadas nas cláusulas AGGREGATE KEY, UNIQUE KEY ou DUPLICATE KEY. O índice de prefixo utiliza os primeiros 36 bytes das colunas-chave de cada linha como estrutura de consulta acelerada.

Aplica-se uma restrição: se uma coluna-chave for do tipo VARCHAR, o índice de prefixo será truncado no limite dessa coluna, mesmo que o consumo não atinja 36 bytes.

Exemplos

Exemplo 1: Índice de prefixo abrange várias colunas

Nome da coluna

Tipo

user_id

BIGINT

age

INT

message

VARCHAR(100)

max_dwell_time

DATETIME

min_dwell_time

DATETIME

Neste esquema, o índice de prefixo corresponde a user_id (8 bytes) + age (4 bytes) + message (prefixo de 20 bytes), totalizando 36 bytes.

Consultas que filtram pelas colunas iniciais utilizam o índice de prefixo e apresentam desempenho significativamente superior:

-- Hits the prefix index: user_id is the first key column
SELECT * FROM table WHERE user_id = 1829239 AND age = 20;

Consultas que ignoram a primeira coluna-chave não utilizam o índice de prefixo:

-- Does not hit the prefix index: user_id is not in the filter
SELECT * FROM table WHERE age = 20;

Exemplo 2: Índice de prefixo truncado por VARCHAR

Nome da coluna

Tipo

user_name

VARCHAR(20)

age

INT

message

VARCHAR(100)

max_dwell_time

DATETIME

min_dwell_time

DATETIME

Neste esquema, o índice de prefixo corresponde apenas a user_name (20 bytes). Como user_name é VARCHAR, o índice é truncado após essa coluna, embora apenas 20 bytes tenham sido consumidos. As colunas subsequentes (age, message) não fazem parte do índice de prefixo.

Modifique um índice de prefixo usando uma materialized view

A ordem das colunas-chave de uma tabela é fixa na criação; portanto, cada tabela possui apenas um índice de prefixo. Para adotar uma ordem diferente de colunas e obter um índice de prefixo distinto, crie uma materialized view que reordene as colunas. Para mais informações, consulte Materialized views.

Próximos passos