SQL Academy · Lección

Índices B-tree, Hash, GiST y GIN

Compare los principales tipos de índices de PostgreSQL y elija el adecuado para consultas de igualdad, rangos, geometría, JSON y texto completo.

Lección 1 de 413 pasos

Índices B-tree, Hash, GiST y GIN es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

Resumen de los tipos de índice

PostgreSQL tiene varios tipos de índice, cada uno optimizado para distintos patrones de acceso:

  • B-tree — igualdad y rangos, el predeterminado
  • Hash — solo igualdad
  • GiST — datos geométricos, texto completo y usos personalizados
  • GIN — valores compuestos, como arrays, JSONB y texto completo
  • BRIN — rangos de bloques; tablas enormes y ordenadas
  • SP-GiST — árboles particionados espacialmente

B-tree: el predeterminado

Se utiliza el 95 % de las veces. Admite =, <, <=, >, >=, BETWEEN y ORDER BY:

CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);

Índice Hash

Solo permite búsquedas por igualdad. Es seguro frente a fallos desde PG 10. Es más pequeño y ligeramente más rápido que B-tree para la igualdad pura, pero su ámbito de uso es muy reducido:

CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.

Índice GiST

Árbol de búsqueda generalizado: es extensible y admite tipos de rango, tipos geométricos, direcciones IP y búsquedas de texto completo:

CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.

CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.

Índice GIN

Índice invertido generalizado: es la mejor opción para valores compuestos en los que cada elemento se corresponde con muchas filas:

CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators

CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search

CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queries

Índice BRIN

Los índices Block Range INdexes resumen rangos de valores por cada N páginas. Son diminutos, apenas unos kilobytes para tablas de terabytes, pero solo resultan eficaces cuando los datos están ordenados físicamente por la columna indexada:

CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.

Comparación de tamaños

Para una tabla de mil millones de filas:

  • B-tree sobre un BIGINT: ~30 GB
  • BRIN sobre un TIMESTAMPTZ: ~1 MB

BRIN es muchísimo más pequeño, pero solo supera a B-tree en consultas secuenciales u ordenadas.

Cómo elegir el tipo de índice

Flujo de decisión:

  • Igualdad y rangos sobre escalares → B-tree
  • Igualdad sobre un conjunto escalar enorme → B-tree; use Hash solo si lo ha medido
  • Arrays, JSONB o texto completo → GIN
  • Tipos de rango, geometría o texto aproximado → GiST
  • Tabla masiva ordenada y de solo anexado → BRIN

Compromisos de GIN

GIN es el más rápido para consultas del tipo «busque todas las filas que contienen X», pero es más lento al hacer INSERT/UPDATE que B-tree. Para tablas con muchísimas escrituras, considere fastupdate=off para controlar la lista pendiente de GIN.

Clases de operadores

Cada tipo de índice funciona con operadores específicos. JSONB usa jsonb_path_ops para crear índices de contención más pequeños y rápidos:

CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.

Índices compuestos por tipo

Los índices compuestos B-tree usan coincidencias por prefijo izquierdo. Los compuestos GIN funcionan, pero son más grandes; normalmente se crean índices GIN independientes para cada columna.

Resumen

Elija el tipo de índice que se adapte a la consulta.

  • B-tree: predeterminado
  • GIN: arrays, JSONB y texto completo
  • GiST: rangos, geometría y búsquedas aproximadas
  • BRIN: consultas secuenciales y tablas de solo anexado

Comprobación rápida

Va a indexar una columna TEXT[] para consultas de «contiene». ¿Qué tipo de índice es el adecuado?

Gratis para empezar

Aprende SQL con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
46
Lecciones
183

Preguntas frecuentes

¿La lección «Índices B-tree, Hash, GiST y GIN» es gratis?

Sí — el texto completo de «Índices B-tree, Hash, GiST y GIN» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Índices B-tree, Hash, GiST y GIN»?

Compare los principales tipos de índices de PostgreSQL y elija el adecuado para consultas de igualdad, rangos, geometría, JSON y texto completo. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Índices B-tree, Hash, GiST y GIN»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Índices B-tree, Hash, GiST y GIN
  2. Índices compuestos y orden de las columnas
  3. Índices parciales y de expresiones
  4. Mantenimiento de índices y fragmentación
← Volver a SQL Academy