¿QUÉ SON LOS ÍNDICES B-TREE EN MYSQL Y POR QUÉ SON TAN IMPORTANTES?
Un índice B-Tree, Balanced Tree, es una estructura de datos de árbol balanceado diseñada específicamente para sistemas de almacenamiento en disco. Su objetivo principal: minimizar el número de accesos a disco al realizar búsquedas.Características
- Cada nodo puede tener múltiples hijos (no es un árbol binario).
- Todos los nodos hoja están al mismo nivel (balanceado).
- Las operaciones de búsqueda, inserción y eliminación son O(log n).
¿Cómo funciona en MySQL (InnoDB)?
- En InnoDB todos los índices son B+ Tree
- Los nodos internos contienen solo claves (para guiar la búsqueda).
- Los nodos hoja contienen las claves + los datos (en índices primarios) o claves + puntero (en índices secundarios).
- Los nodos hoja están enlazados entre sí, lo que permite recorridos muy eficientes en rangos (BETWEEN, >, <, ORDER BY, etc.).
Ventajas de los índices B-Tree
- Excelente rendimiento en búsquedas por igualdad (=) y por rango.
- Muy buenos para ORDER BY y GROUP BY.
- Soporta consultas que usan prefijos de la clave.
- Mantiene los datos ordenados.
Ejemplo
CREATE TABLE usuarios (
id BIGINT PRIMARY KEY, -- Índice B-Tree automático
email VARCHAR(255) UNIQUE, -- Otro B-Tree
apellido VARCHAR(100),
fecha_registro DATE,
INDEX idx_apellido_fecha (apellido, fecha_registro) -- Índice compuesto B-Tree
);
Este índice compuesto sirve para consultas como:
- WHERE apellido = 'García'
- WHERE apellido = 'García' AND fecha_registro > '2025-01-01'
- Pero no sirve para WHERE fecha_registro = '2025-01-01,ya que el índice ordena primero por apellido y dentro de cada apellido, ordena por fecha_registro..
Cuándo crear índices B-Tree
Ver el índice B-Trees
EXPLAIN SELECT * FROM usuarios WHERE apellido = 'García';
-- Busca "type: ref" o "range" y "key" con el nombre del índice