Sobes.tech
Middle

¿Qué tipos de índices existen en PostgreSQL?

sobes.tech AI

Respuesta de la IA

Existen los siguientes tipos principales de índices:

  1. B-tree (Árbol B) - el tipo más común, adecuado para la mayoría de las consultas típicas (igualdad, comparación, rango). Basado en un árbol equilibrado.

  2. Hash (Hash) - utilizado para verificar igualdad (=). Más rápido que B-tree para estas consultas, pero no soporta comparaciones ni rangos. Almacena el valor hash de la clave y un puntero a la fila.

  3. GiST (Árbol de búsqueda generalizado) - estructura de árbol de búsqueda generalizada que permite construir diferentes índices para tipos de datos complejos (geométricos, de texto con búsqueda de texto completo). Basado en un árbol equilibrado.

  4. SP-GiST (Árbol de búsqueda generalizado particionado por espacio) - versión especializada de GiST para datos que se pueden dividir por espacio (por ejemplo, puntos, rectángulos). Ejemplos: árboles k-d, quadtrees.

  5. GIN (Índice invertido generalizado) - índice invertido generalizado, principalmente para buscar elementos dentro de valores compuestos (por ejemplo, arreglos, JSONB). Frecuentemente usado para búsqueda de texto completo.

  6. BRIN (Índice de rango de bloques) - índice de rango de bloques. Adecuado para tablas muy grandes con datos ordenados naturalmente (por ejemplo, por tiempo). Indexa el rango de valores en bloques físicos del disco.

  7. Bloom (Filtro de Bloom) - no es un índice tradicional, sino una estructura de datos probabilística para verificar rápidamente la ausencia de un elemento. Se usa para acelerar consultas en tablas muy grandes cuando no se requiere coincidencia exacta o como filtro adicional antes de escanear el índice principal.

Ejemplos de uso:

  • B-tree: índice en campos numéricos, fechas, cadenas para búsquedas por rango (WHERE amount > 100).
  • Hash: raramente usado directamente, ya que B-tree suele ser más rápido para la mayoría de las tareas.
  • GiST: índices geoespaciales (gist(location)), índices para búsqueda de texto completo (to_tsvector).
  • SP-GiST: índices para datos bidimensionales (spgist(point)).
  • GIN: índices para arreglos (gin(tags)), JSONB (gin(data)), búsqueda de texto completo.
  • BRIN: índice en el campo timestamp en tablas de logs, donde los datos están ordenados por tiempo.
  • Bloom: índice en un conjunto de columnas (bloom(col1, col2, col3)) para descartar rápidamente filas donde la combinación de valores no está presente.

La elección del tipo de índice depende del tipo de datos de la columna y del tipo de consultas que se desean optimizar.