Índices de bases de datos, explicados con una guía telefónica
Cada consulta lenta que he arreglado se reducía a la misma imagen. Le pides a MySQL WHERE email = 'omar@example.com' y, sin un índice, solo puede hacer una cosa:
Qué es realmente un índice
Un índice es una segunda estructura, ordenada, junto a tu tabla: un árbol B. Las cosas ordenadas se buscan dividiendo a la mitad, así que la base de datos da saltos, no pasos. La misma consulta, con un índice en email:
Cuándo añadir un índice
- Columnas en el
WHERE, elJOIN ... ONy elORDER BYde tus consultas frecuentes. - Claves foráneas, siempre.
- No en columnas por las que casi nunca filtras: cada índice ralentiza un poco las escrituras.
EXPLAIN sobre la consulta. Si ves type: ALL, ese es el primer boceto: un recorrido completo. Con el índice correcto se convierte en ref o range, el segundo boceto.La mejora del 20% de rendimiento que entregué en Getmayes fue, en su mayor parte, esto: leer la salida de EXPLAIN, dibujar el árbol, y añadir los cuatro índices que las consultas llevaban tiempo pidiendo.
Notas de los lectores