¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Por qué un índice acelera una consulta

Después de esta lección: Puedo explicar cómo un índice hace más rápida una consulta.

Lección de 40 minSin comandos

Ocho segundos por cada llamada

Café Turia ha crecido. Su tabla de pedidos tiene ahora 2.000.000 de filas.

Cada vez que llama un cliente, el equipo busca sus pedidos por correo electrónico. La pantalla tarda ocho segundos en responder, y el cliente espera al teléfono.

Una sola línea de SQL lo deja en menos de una décima de segundo.

Al final de esta lección

Nota

Puedo explicar cómo un índice hace más rápida una consulta.

Palabras clave

PalabraQué significaEjemplo
Recorrido completoleer todas las filas de la tabla, una a unaSCAN
Índiceuna lista ordenada de una columna que apunta a las filas
Búsqueda por índiceir directo a las filas usando el índiceSEARCH
Plan de consultael camino que la base de datos elige para responder
EXPLAIN QUERY PLANmuestra el plan sin ejecutar la consulta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Sin índice, se lee todo

Imagina buscar a una persona en una lista de dos millones de nombres sin ningún orden. Tienes que leerlos todos, porque puede estar en cualquier sitio.

Eso hace la base de datos cuando no hay índice: un recorrido completo. Prueba cada fila contra el WHERE, desde la primera hasta la última. Con pocas filas no se nota. Con millones, son segundos.

Ejemplo: filas que hay que mirar

Filas en la tablaSin índiceCon índice, más o menos
1.0001.00010 pasos
100.000100.00017 pasos
2.000.0002.000.00021 pasos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un índice es una lista ordenada

Un índice se parece a una guía de calles ordenada de la A a la Z. Como está en orden, vas directo a la letra que buscas y no lees el resto.

El índice guarda los valores de una columna en orden. Junto a cada valor anota dónde está la fila.

EXPLAIN QUERY PLAN delante de una consulta enseña el camino elegido: SCAN es leer todo y SEARCH es usar un índice.

Prueba: el plan sin índice

Código: sql
-- ¿Qué camino sigue la base de datos? Todavía no hay índice.
EXPLAIN QUERY PLAN
SELECT * FROM orders WHERE email = '[email protected]';

-- Busca la palabra SCAN en el resultado.

Prueba: el plan con índice

Código: sql
-- Creamos un índice sobre la columna email.
CREATE INDEX idx_orders_email ON orders(email);

-- La misma pregunta de antes.
EXPLAIN QUERY PLAN
SELECT * FROM orders WHERE email = '[email protected]';

-- Ahora busca SEARCH y el nombre del índice.

Un índice tiene un precio

Un índice no cambia las filas que salen. Solo cambia el camino para llegar a ellas.

Pero ocupa espacio en disco. Además, cada vez que entra un pedido nuevo, la base de datos actualiza también el índice.

Por eso se indexan las columnas por las que se busca a menudo, no todas.

Prueba: el mismo resultado con y sin índice

Código: sql
CREATE INDEX idx_orders_email ON orders(email);

-- Sin EXPLAIN: la consulta normal, ya con índice.
SELECT id, amount FROM orders WHERE email = '[email protected]';

-- Borra la línea CREATE INDEX y vuelve a ejecutar.
-- ¿Cambian las filas?

Un error frecuente

Advertencia

Mucha gente cree que cuantos más índices, mejor. No es así. Cada índice ocupa espacio y hace más lenta cada escritura. Crea un índice cuando una columna aparece a menudo en WHERE o en ON y la consulta va lenta.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.