Una consulta, tres planes en SQL
La misma pregunta hecha de tres formas, con el plan tras cada una — la diferencia es la lección.
-- 1. sin índice: el motor lee cada pedido y luego ordena
EXPLAIN QUERY PLAN
SELECT
id,
total
FROM orders
WHERE customer_id = 7
ORDER BY placed_at DESC;
-- 2. índice solo del filtro: busca, pero el ordenamiento sigue temporal
CREATE INDEX tune_customer
ON orders (customer_id);
EXPLAIN QUERY PLAN
SELECT
id,
total
FROM orders
WHERE customer_id = 7
ORDER BY placed_at DESC;
-- 3. filtro más clave de orden: el índice resuelve ambas mitades
DROP INDEX tune_customer;
CREATE INDEX tune_customer_date
ON orders (customer_id, placed_at DESC);
EXPLAIN QUERY PLAN
SELECT
id,
total
FROM orders
WHERE customer_id = 7
ORDER BY placed_at DESC;
Cómo funciona
- Parte de la versión lenta y lee qué hace el planificador con ella.
- El índice cambia el plan de un scan a un search; comprueba que así fue.
- Mide el plan, no tu intuición sobre el plan.
Palabras clave y builtins usados aquí
BYCREATEDESCDROPEXPLAINFROMINDEXONORDERSELECTWHERE
El intento, en números
- Líneas
- 34
- Caracteres a escribir
- 637
- Tokens
- 82
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 52 segundos.
Paso 3 de 3 en Hacerla más rápida; paso 10 de 17 en Planes y rendimiento.