Ir para o conteúdo principal

MySQL: Índice Secundário (Secondary Index)

O que é um Índice Secundário (Secondary Index)?

Um Índice Secundário (Secondary Index) é um tipo de índice criado em colunas diferentes da Chave Primária. O objetivo de um Índice Secundário é acelerar as consultas de pesquisa baseadas em colunas diferentes da Chave Primária. Quando uma consulta de pesquisa é executada em uma coluna com um Índice Secundário, o MySQL pode usar esse índice para encontrar dados mais rapidamente, evitando uma varredura completa da tabela.

Estrutura do Índice Secundário

Um Índice Secundário é normalmente organizado como uma B+ Tree, semelhante a um Índice Chave Primário. No entanto, uma grande diferença é que os nós folha de um Índice Secundário não armazenam os dados reais da linha, mas sim os valores da Chave Primária. Ao pesquisar usando um Índice Secundário, o MySQL encontra o valor da Chave Primária correspondente e então usa esse valor para acessar os dados atuais na tabela.

Por exemplo:

Em uma tabela onde a coluna "email" possui um Índice Secundário, os nós folha deste índice conterão os valores de "email" junto com as Chaves Primárias correspondentes. Ao procurar por um "e-mail" específico, o MySQL usa o Índice Secundário para encontrar a Chave Primária e então acessa os dados com base nessa chave.

Tipos comuns de estruturas de índice secundário

  • Índice de B+ Tree: Este é o tipo mais comum de estrutura de índice secundário, apresentando bom desempenho com consultas de pesquisa baseadas em colunas com uma característica de ordem (classificação).
  • Índice Hash: Fornece velocidade de pesquisa rápida, mas não oferece suporte adequado para consultas baseadas em pedidos ou intervalos. O índice Hash é menos comumente usado no MySQL.
  • Índice Fulltext: Otimizado para consultas de pesquisa de texto, o Índice Fulltext é adequado para colunas que contêm textos longos, como artigos ou descrições de produtos.

Comparação do Índice Secundário e do Índice Clusterizado

Estrutura

Um Índice Clusterizado organiza os dados da tabela diretamente de acordo com a ordem da Chave Primária, ou seja, os dados físicos são armazenados no disco na ordem deste índice. Por outro lado, um Índice Secundário contém apenas a Chave Primária e não afeta a estrutura física da tabela.

Desempenho

Um Índice Clusterizado geralmente oferece maior desempenho de consulta para pesquisas baseadas na Chave Primária, uma vez que não requer acesso adicional a um Índice Secundário. No entanto, um Índice Secundário é útil ao otimizar consultas baseadas em colunas diferentes da Chave Primária.

Flexibilidade

Um Índice Clusterizado limita a tabela a um único índice, enquanto uma tabela pode ter vários Índices Secundários para suportar vários tipos de consultas.

1724769429410.jpeg

Origem: Linkedin: Đinh Quang Tùng - Backend Developer at HBLAB JSC