Saltar al contenido principal
eLearner.app
Módulo 10 · Lección 1 de 437/57 en el curso~15 min
Lecciones del módulo (1/4)

Índices y B-Trees

¿Cómo puede una base de datos encontrar un único registro entre millones de filas en fracciones de segundo?

De forma predeterminada, cuando preguntamos SELECT * FROM customers WHERE city = 'Milano', Postgres tiene que realizar un Escaneo secuencial: lee físicamente toda la tabla del disco fila por fila, comparando cada ciudad con "Milán". Cuando una tabla contiene millones de registros, este proceso perjudica el rendimiento.

La principal respuesta estructural a estos cuellos de botella son los Índices.

Índices (árboles B)

Los índices funcionan exactamente como el índice analítico que se encuentra al final de un libro grande. En lugar de leer el libro completo para encontrar dónde se habla de "Milano", buscamos en las últimas páginas donde la palabra "Milano" nos redirige a [p. 45, 114, 230]. Las bases de datos, detrás de escena, construyen esta estructura de datos separada y muy compacta (a menudo un "árbol B") ordenada por la columna o columnas en cuestión, que contiene punteros directos al almacenamiento físico de las filas coincidentes.

SQL
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);

Esta única operación activa el motor Postgres, que extraerá e indexará todos los valores city en segundo plano. Una vez completado, ¡todos los SELECT ... WHERE city = '...' subsiguientes volarán!

Claves primarias y unicidad

¿Sabía que las reglas de clave principal (PRIMARY KEY) y UNIQUE utilizan índices ocultos en secreto? Dado que la base de datos debe garantizar que un correo electrónico o ID nunca se duplique al insertar o modificar filas, PostgreSQL crea automáticamente un índice B-Tree implícito encima de ellas: de esta manera, las comprobaciones de unicidad toman microsegundos.

Es por eso que las uniones en el campo ID tienen un rendimiento increíble.

Eliminar un índice

Si se da cuenta de que las consultas importantes han cambiado y nunca se consulta un índice, es aconsejable destruirlo y recuperar espacio vital:

SQL
DROP INDEX idx_customers_city;

Tu turno

Ejercicio#sql.m10.l1.e1
Intentos: 0Cargando...

En nuestro comercio electrónico notamos a través de paneles de control que muy a menudo filtramos a los clientes por nacionalidad (la columna de país en clientes). Cree un nuevo índice base en la columna del país y asígnele el nombre 'idx_customers_country'.

Cargando editor...
Mostrar pista

Utilice CREATE INDEX nombre_índice ON nombre_tabla(nombre_columna);

Solución disponible después de 3 intentos

Explorando índices únicos secundarios

Ejercicio#sql.m10.l1.e2
Intentos: 0Cargando...

También se puede utilizar un índice B-Tree para simular una restricción UNIQUE en el momento de la creación y acelerar las búsquedas, mientras se hace explícita y se aplica la intención lógica. Cree un nuevo índice donde declare la palabra clave UNIQUE. Defínalo para que bloquee cualquier registro duplicado no deseado de otros usuarios, forzando la unicidad en la columna "correo electrónico" de "clientes", y asígnele el nombre "idx_unique_email_customer".

Cargando editor...
Mostrar pista

Escriba CREAR ÍNDICE ÚNICO nombre_índice EN la tabla (columna);

Solución disponible después de 3 intentos