Sobes.tech
Middle

Que tipos de índices existem no SQL?

sobes.tech IA

Resposta da IA

  • Árvore B (B-tree): O tipo mais comum. Adequado para a maioria das operações de leitura, incluindo WHERE, LIKE, ORDER BY.

    CREATE INDEX idx_column ON table_name (column_name);
    
  • Hash (Hash): Otimizado para coincidências exatas (=). Não suporta consultas de intervalo ou ordenação.

    -- Exemplo de sintaxe, pode variar dependendo do SGBD
    CREATE INDEX idx_column ON table_name USING HASH (column_name);
    
  • Texto completo (Full-Text): Usado para busca em texto em campos de texto grandes (VARCHAR, TEXT).

    -- Exemplo de sintaxe no MySQL
    CREATE FULLTEXT INDEX idx_text ON table_name (text_column);
    -- Exemplo de sintaxe no PostgreSQL
    CREATE INDEX idx_text ON table_name USING GIN (to_tsvector('russian', text_column));
    
  • Espacial (Spatial): Para indexar dados geográficos (pontos, linhas, polígonos). Usados com tipos de dados como GEOMETRY ou GEOGRAPHY.

    -- Exemplo de sintaxe no MySQL
    CREATE SPATIAL INDEX idx_geo ON table_name (spatial_column);
    -- Exemplo de sintaxe no PostgreSQL
    CREATE INDEX idx_geo ON table_name USING GIST (spatial_column);
    
  • GIN (Índice invertido generalizado) e GiST (Árvore de busca generalizada) no PostgreSQL: Tipos de índices flexíveis, adequados para várias tarefas, incluindo busca de texto completo, indexação de arrays e JSON.

  • Clustér (Clustered): Define a ordem física das linhas na tabela. Uma tabela pode ter apenas um índice clúster. Frequentemente baseado na chave primária.

    -- Ao declarar a chave primária, muitas vezes é criado um índice clúster
    CREATE TABLE table_name (
        id INT PRIMARY KEY CLUSTERED, -- No SQL Server
        ...
    );
    
  • Não clúster (Non-Clustered): Estrutura de dados separada que armazena pares "valor de coluna (ou colunas) + ponteiro para a linha de dados". A tabela pode ter múltiplos índices não clúster.

Comparação:

Tipo de índice Aplicação Operações
Árvore B (B-árvore) Geral, a maioria dos tipos de dados =, <, >, <=, >=, BETWEEN, LIKE (início)
Hash Coincidência exata (=) =
Texto completo Busca por texto MATCH AGAINST (MySQL), to_tsquery (PostgreSQL)
Espacial Dados geográficos Funções espaciais
Clúster Ordenação física de linhas Acelera a seleção de intervalos
Não clúster Acelera a busca por colunas indexadas =, <, >, <= e outros