Saltar al contenido

Proyecto: acelera el buscador

SQL · Unidad 15: Índices y rendimiento

«¿Qué pedí esta semana?» En el mostrador, el buscador de pedidos tiene un botón para eso: los pedidos de un cliente desde hace 7 días, que hoy es del 8 al 15 de enero. La unidad pasada contaba la última semana del 9 al 15, y este botón cuenta también el día 8. Quien lo escribió venía de aprender DATE y le sumó 7 días a cada fecha para compararla con hoy. Ana, la clienta 1, tiene tres pedidos, y de esta semana es uno, el del día 12.

La consulta devuelve lo que debe. El plan dice SCAN pedidos, y ese botón se toca todo el día. El trabajo es llevarla de SCAN a SEARCH sin que cambie una sola fila de lo que devuelve.

EXPLAIN QUERY PLAN
SELECT id, producto_id, fecha
FROM pedidos
WHERE cliente_id = 1
  AND DATE(fecha, '+7 days')
    >= '2026-01-15';

Devuelve

detail
SCAN pedidos

El resto de la explicación está en la lección, que es del plan completo.

Ejercicios de esta lección

Se hacen en la app, que los corrige al momento y explica por qué.

  1. 1. Predice la salida

    Para dejar la columna sin envolver, la cuenta pasa al otro lado. En vez de sumarle 7 días a cada fecha, se le restan a hoy, una sola vez. ¿Qué fecha sale?

  2. 2. Escribe el código

    Reescribe el botón «esta semana» para Ana, la clienta 1: id, producto_id y fecha, en ese orden, de sus pedidos desde hoy menos 7 días. Hoy es 15 de enero (vale escribirlo a mano o con DATE('now')) y el día 8 cuenta. Deja la columna fecha sola a un lado de la comparación, como ya empieza el código. Este ejercicio se califica por las filas. Al plan le toca dos ejercicios más adelante.

  3. 3. Escribe el código

    Falta el índice. Debajo está la consulta ya reescrita, con su EXPLAIN QUERY PLAN: si ejecutas sin escribir nada, el plan sigue diciendo SCAN pedidos. La búsqueda entra por un cliente, con =, y dentro de él acota por fecha. Crea sobre pedidos, en el sitio del comentario, antes del EXPLAIN QUERY PLAN, un índice de dos columnas que sirva a las dos condiciones, con las columnas en el orden que eso pide. Llámalo como quieras. En esta app el índice se va al terminar la ejecución.

  4. 4. Escribe el código

    ¿Bastaba con el índice? Debajo está el botón «esta semana» tal como estaba al principio, con el índice ya creado. Ejecuta: el paréntesis del plan dice (cliente_id=?), y la segunda columna del índice no trabaja. Cambia solo la condición sobre fecha por la que escribiste antes, con >=, hasta que el paréntesis diga (cliente_id=? AND fecha>?). Este ejercicio se califica por el plan que sale, no por las filas.

  5. 5. Opción múltiple

    Mañana te dan acceso a una base que no hiciste tú, con tablas de millones de filas, y alguien dice que un reporte «va lento». ¿Por dónde empiezas?

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →