Todos los artículos

Índices de bases de datos, explicados con una guía telefónica

Bases de datos · 2 min de lectura ·

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:

tabla users · 1.000.000 filas lee cada fila, una a una como buscar un nombre en la guía telefónica leyendo la página 1, luego la página 2, luego la página 3...
Un recorrido completo de la tabla. Bien con 1.000 filas, doloroso con 1.000.000.

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:

A - Z A - M N - Z A - F G - M N - S T - Z salto 1 salto 2 salto 3: encontrado. Tres lecturas en vez de un millón.
Búsqueda en árbol B: cada salto reduce el espacio de búsqueda a la mitad o más.

Cuándo añadir un índice

  • Columnas en el WHERE, el JOIN ... ON y el ORDER BY de tus consultas frecuentes.
  • Claves foráneas, siempre.
  • No en columnas por las que casi nunca filtras: cada índice ralentiza un poco las escrituras.
Antes de adivinar, ejecuta 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

  1. Todavía no hay notas. La primera siempre es la más valiente.
¿Estás construyendo algo parecido? Puedo ayudarte. Contacto