¿Qué tipos de índices existen en SQL?
sobes.tech AI
Respuesta de la IA
-
Árbol B (B-tree): El tipo más común. Adecuado para la mayoría de las operaciones de lectura, incluyendo
WHERE,LIKE,ORDER BY.CREATE INDEX idx_column ON table_name (column_name); -
Hash (Hash): Optimizado para coincidencias exactas (
=). No soporta consultas de rango ni ordenamiento.-- Ejemplo de sintaxis, puede variar según el SGBD CREATE INDEX idx_column ON table_name USING HASH (column_name); -
Texto completo (Full-Text): Utilizado para búsqueda en texto en campos de texto grandes (
VARCHAR,TEXT).-- Ejemplo de sintaxis en MySQL CREATE FULLTEXT INDEX idx_text ON table_name (text_column); -- Ejemplo de sintaxis en PostgreSQL CREATE INDEX idx_text ON table_name USING GIN (to_tsvector('russian', text_column)); -
Espacial (Spatial): Para indexar datos geográficos (puntos, líneas, polígonos). Usados con tipos de datos como
GEOMETRYoGEOGRAPHY.-- Ejemplo de sintaxis en MySQL CREATE SPATIAL INDEX idx_geo ON table_name (spatial_column); -- Ejemplo de sintaxis en PostgreSQL CREATE INDEX idx_geo ON table_name USING GIST (spatial_column); -
GIN (Índice Invertido Generalizado) y GiST (Árbol de Búsqueda Generalizado) en PostgreSQL: Tipos de índices flexibles, adecuados para diversas tareas, incluyendo búsqueda de texto completo, indexación de arrays y JSON.
-
Clúster (Clustered): Define el orden físico de las filas en la tabla. Una tabla puede tener solo un índice clúster. Frecuentemente basado en la clave primaria.
-- Al declarar la clave primaria, a menudo se crea un índice clúster CREATE TABLE table_name ( id INT PRIMARY KEY CLUSTERED, -- En SQL Server ... ); -
No clúster (Non-Clustered): Estructura de datos separada que almacena pares "valor de columna (o columnas) + puntero a la fila de datos". La tabla puede tener múltiples índices no clúster.
Comparación:
| Tipo de índice | Aplicación | Operaciones |
|---|---|---|
| Árbol B (B-árbol) | General, la mayoría de los tipos de datos | =, <, >, <=, >=, BETWEEN, LIKE (inicio) |
| Hash | Coincidencia exacta (=) |
= |
| Texto completo | Búsqueda en texto | MATCH AGAINST (MySQL), to_tsquery (PostgreSQL) |
| Espacial | Datos geográficos | Funciones espaciales |
| Clúster | Ordenamiento físico de filas | Acelera la selección de rangos |
| No clúster | Acelera la búsqueda en columnas indexadas | =, <, >, <= y otros |