Esta primera entrega de una serie ofrece una inmersión técnica en el funcionamiento interno de los índices B-Tree de PostgreSQL, la estructura más utilizada para acelerar consultas en tablas grandes. El artículo comienza explicando que PostgreSQL dispone de seis tipos de índices —B-tree, Hash, GiST, SP-GiST, GIN y BRIN— y que cada uno responde a un caso de uso distinto, por lo que conviene elegir el más adecuado en cada situación.
A continuación, repasa la lógica del B-tree (árbol equilibrado): nodos con un número variable de hijos fijado por el orden M, altura logarítmica que se ajusta automáticamente, datos ordenados de menor a mayor y todas las hojas situadas al mismo nivel para garantizar búsquedas eficientes. El artículo sitúa este modelo en el algoritmo de Lehman y Yao (1981) y contrasta, mediante complejidad O, la diferencia entre un escaneo secuencial —lento en lecturas grandes— y un acceso por índice.
La guía también recapitula cómo almacena PostgreSQL los datos en disco: cada tabla se mapea a un fichero identificado por su OID, dividido en páginas con un encabezado, punteros y tuplas que crecen desde abajo. En el caso concreto de las tablas, los datos pueden repartirse entre varias páginas; cuando superan 1 GB, se fragmentan en ficheros de hasta 1 GB. Se introduce el concepto de ctid (bloque + desplazamiento) y las tablas TOAST para filas largas.
Cierra adelantando que la estructura de índice es un fichero independiente asociado a la tabla y que las hojas del B-tree apuntan a ctids concretos, preparando el terreno para las próximas partes de la serie.
