Saltar al contenido

CREATE INDEX

SQL · Unidad 15: Índices y rendimiento

¿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_idid
11
12
17
23
26
212

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. 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. 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. 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. 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. 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. 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 diciendo SCAN pedidos. ¿Qué línea tiene el problema?

  7. 7. Predice la salida

    Esta es la tabla de proveedores de la unidad 12, con sus tres primeras columnas. Una columna UNIQUE también trae su índice, y lo crea la base: sin él, comprobar que un correo no está repetido sería recorrer la tabla en cada INSERT. Aquí ese índice se llama sqlite_autoindex_, la tabla y un número. ¿Qué plan sale al buscar a Andina por su correo?

  8. 8. Predice la salida

    En clientes hay tres personas de Lima. ¿Qué devuelve el SELECT, ahora que existe el índice?

  9. 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 dice SCAN clientes. Crea un índice sobre la columna nombre de clientes, en el sitio del comentario, antes del EXPLAIN QUERY PLAN, y ejecuta otra vez. Llámalo como quieras; el nombre de costumbre sería idx_clientes_nombre.

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 →