CREATE INDEX
SQL · Unidad 15: Índices y rendimiento
- Plan completo
- SQL
- 9 ejercicios
¿Cómo encuentra alguien el Monitor en el catálogo impreso de la tienda? Va derecho al índice del final, el que ordenaste en la unidad 3, que está en orden alfabético y dice la página.
Para encontrar los pedidos de Luis sin leer los doce, la base necesita lo mismo: una lista aparte, ordenada por cliente_id, que diga qué pedido es cada uno. Así empieza esa lista, con los clientes 1 y 2. Los tres de Luis están juntos, y en una lista ordenada se busca abriendo por la mitad y descartando el lado donde no puede estar.
SELECT cliente_id, id
FROM pedidos
WHERE cliente_id <= 2
ORDER BY cliente_id, id;Devuelve
| cliente_id | id |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 7 |
| 2 | 3 |
| 2 | 6 |
| 2 | 12 |
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. Opción múltiple
Buscar en una lista ordenada es partirla: se mira el valor del medio y se descarta la mitad donde no puede estar lo que buscas. La lista de la tienda grande tiene 800 000 entradas. ¿Cuántas veces hay que partirla, más o menos, para llegar a los pedidos de Luis?
2. Completa el código
La app deja filtrar el catálogo por sección. Completa el índice que le sirve a ese filtro. El plan de abajo tiene que decir
SEARCH.3. Ordena las líneas
El almacén pregunta varias veces al día qué pedidos llevan un producto. Ordena las líneas para crear el índice y ver después el plan de la búsqueda de los Audífonos, el producto 7. Sobran dos.
4. Encuentra el caso que falla
El almacén imprime cada mañana los pedidos de 2 unidades o más, y da por hecho que salen en el orden de su
id, porque siempre han salido así. ¿Con cuál de estos cambios deja de cumplirse?5. Completa el código
Sin crear ningún índice, una de estas tres búsquedas ya es un
SEARCH. Completa con la columna que lo consigue.6. Encuentra el bug
Alguien creó un índice para la pantalla que busca los pedidos de un día. El plan debería decir
SEARCH, y sigue diciendoSCAN pedidos. ¿Qué línea tiene el problema?7. Predice la salida
Esta es la tabla de proveedores de la unidad 12, con sus tres primeras columnas. Una columna
UNIQUEtambién trae su índice, y lo crea la base: sin él, comprobar que un correo no está repetido sería recorrer la tabla en cadaINSERT. Aquí ese índice se llamasqlite_autoindex_, la tabla y un número. ¿Qué plan sale al buscar a Andina por su correo?8. Predice la salida
En
clienteshay tres personas de Lima. ¿Qué devuelve elSELECT, ahora que existe el índice?9. Escribe el código
En el mostrador buscan a cada cliente por su nombre. Debajo está esa búsqueda con su
EXPLAIN QUERY PLAN: si ejecutas sin escribir nada, el plan diceSCAN clientes. Crea un índice sobre la columnanombredeclientes, en el sitio del comentario, antes delEXPLAIN QUERY PLAN, y ejecuta otra vez. Llámalo como quieras; el nombre de costumbre seríaidx_clientes_nombre.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.