Pedir solo lo que hace falta
SQL · Unidad 15: Índices y rendimiento
- Plan completo
- SQL
- 8 ejercicios
Antes de reponer un producto agotado, el dueño mira qué días se pidió. La pantalla que se lo enseña pinta solo fechas, y quien la programó escribió SELECT *, por costumbre. ¿Qué cuesta pedir las cinco columnas de cada pedido para pintar una?
Con un índice sobre (producto_id, fecha), la fecha de cada pedido del Cable ya está en el índice. Si la consulta pide solo fecha, la base contesta con él y no abre la tabla. El plan lo dice con una palabra más, COVERING: el índice cubre lo pedido.
Con SELECT *, por cada entrada del índice va además a la tabla, por columnas que nadie va a mirar.
CREATE INDEX idx_pedidos_producto_fecha
ON pedidos (producto_id, fecha);
EXPLAIN QUERY PLAN
SELECT fecha
FROM pedidos
WHERE producto_id = 4;Devuelve
| detail |
|---|
| SEARCH pedidos USING COVERING INDEX idx_pedidos_producto_fecha (producto_id=?) |
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
Con ese mismo índice, y ahora para el Ratón, el producto 2. Completa para que el plan diga
COVERING, porque a la base le alcanza con el índice.2. Predice la salida
¿Cuándo se pidió el Cable por última vez? Con el índice de dos columnas ya creado, ¿qué plan sale?
3. Completa el código
Completa con la única de estas condiciones que la base no puede comprobar antes de agrupar, y que por eso la obliga a pasar por los pedidos de todos los clientes.
4. Completa el código
Un reporte corto: cuántas unidades ha pedido cada cliente desde el día 12.
pedidosya tiene un índice sobrefecha. Completa con la condición que deja a la base entrar por ese índice, sin leer los pedidos de antes.5. Predice la salida
Un arreglo deja la consulta como está y le crea a la de adentro un índice sobre
pedidos (cliente_id). ¿Qué plan sale?6. Encuentra el caso que falla
Alguien se queda con ese
JOINy suGROUP BYpara un reporte. El reporte es de los clientes menores de 30 años, que hoy son Luis, Mateo y Diego: cada uno con cuántos pedidos ha hecho, y un 0 para quien no tenga ninguno. ¿Con cuál de estos cambios la versión nueva deja de dar lo mismo que la subconsulta?7. Encuentra el bug
La pantalla 2 de la lista de pedidos terminó en el pedido 6. La pantalla 3 debería enseñar los pedidos 7, 8 y 9, y enseña el 6 otra vez. ¿Qué línea tiene el problema?
8. Escribe el código
La lista también se enseña del pedido más nuevo al más viejo, de 3 en 3. La pantalla anterior terminó en el pedido 10. Escribe la consulta de la pantalla siguiente sin
OFFSET: elidy lafecha, en ese orden, de los tres pedidos anteriores al 10, del más nuevo al más viejo.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.