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
GEOMETRYouGEOGRAPHY.-- 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 |