Cuando el índice no ayuda
SQL · Unidad 15: Índices y rendimiento
- Plan completo
- SQL
- 8 ejercicios
¿A quién llama hoy la bibliotecaria? La unidad pasada lo contestó así, sumándole a cada préstamo sus 3 días para ver si ya venció. Ella abre esa lista cada mañana, así que alguien le crea un índice sobre prestado. El plan sigue diciendo SCAN prestamos.
El índice está ordenado por prestado, y la consulta pregunta por otra cosa, DATE(prestado, '+3 days'), un valor que no está guardado en ningún sitio. Para conocerlo, la base tiene que calcularlo fila por fila. Una función alrededor de la columna deja su índice sin usar.
En esta app, también este índice dura lo que dura la ejecución.
CREATE INDEX idx_prestamos_prestado
ON prestamos (prestado);
EXPLAIN QUERY PLAN
SELECT id, socio
FROM prestamos
WHERE devuelto IS NULL
AND DATE(prestado, '+3 days')
< '2026-01-15';Devuelve
| detail |
|---|
| SCAN prestamos |
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. Completa el código
La misma lista de vencidos, con la cuenta pasada al otro lado: en vez de sumarle 3 días a cada préstamo, se le restan a hoy. Completa para que salga el mismo préstamo de antes, el de Diego.
2. Ordena las líneas
La bibliotecaria cierra las cuentas de enero. La unidad pasada sacaba el mes con
STRFTIME, que envuelve la columna. Ordena las líneas para ver el plan de la versión que dejaprestadosin tocar y pide un rango de fechas. Sobran dos.3. Encuentra el caso que falla
La búsqueda de préstamos por socio compara con
LOWER(socio) = 'ana', para que no importen las mayúsculas. Alguien la cambia por la de abajo, que deja la columna sin envolver y puede usar un índice. Tienen que seguir saliendo losidde todos los préstamos de Ana. ¿Con cuál de estos datos deja de salir alguno?4. Encuentra el bug
Con el índice sobre
socioya creado, el plan de la búsqueda de los préstamos de Ana debería decirSEARCH. DiceSCAN prestamos. ¿Qué línea tiene el problema?5. Predice la salida
En un índice, los títulos que empiezan igual están juntos, y los que terminan igual o llevan la misma palabra en medio están repartidos por todo él. La bibliotecaria busca los libros que llevan
casaen cualquier parte del título, y alguien ya creó un índice sobretitulo. ¿Qué plan sale?6. Opción múltiple
prestamostiene tres índices: sobresocio, sobreprestadoy sobrelibro_id. Entra un préstamo nuevo. ¿En cuántos sitios escribe la base?7. Predice la salida
Ana tiene tres préstamos. ¿Qué devuelve el
SELECT, después de crear el índice y de quitarlo? (En esta app, de todos modos, la base vuelve a empezar al terminar.)8. Opción múltiple
De vuelta en la tienda. El buscador sin acentos de la unidad pasada compara así, y con un catálogo de 200 000 productos cada búsqueda recorre la tabla. ¿Qué lo arregla?
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.