Tabla de contenido
- ¿Qué es un índice en MySQL?
- ¿Por qué usar índices?
- Tipos de índices en MySQL
- Cómo crear un índice
- Cómo ver los índices de una tabla
- ¿Cuándo NO usar índices?
Cuando tu aplicación crece y tu base de datos empieza a tener miles o millones de registros, las consultas que antes eran instantáneas de repente tardan varios segundos. En ese momento, los índices en MySQL se convierten en tu mejor herramienta de optimización.
¿Qué es un índice en MySQL?
Un índice en MySQL es una estructura de datos adicional que MySQL mantiene en paralelo a tu tabla y que permite encontrar registros de forma mucho más rápida, sin tener que revisar cada fila de la tabla.
Una analogía que funciona muy bien: imagina un libro de texto sin índice al final. Si quieres encontrar todas las páginas donde se habla de “JavaScript”, tienes que leer el libro completo página por página. Con un índice al final del libro, simplemente buscas “JavaScript” en orden alfabético y te dice exactamente en qué páginas está. Eso mismo hace un índice en una base de datos.
¿Por qué usar índices?
Sin índices, cuando ejecutas una consulta como esta:
SELECT * FROM usuarios WHERE correo = 'hola@8devmx.com';
SQL
MySQL tiene que revisar cada fila de la tabla usuarios hasta encontrar todas las que coincidan. A esto se le llama full table scan y es muy costoso en tablas grandes.
Con un índice en la columna correo, MySQL puede encontrar el registro directamente sin revisar toda la tabla, lo que puede reducir el tiempo de consulta de segundos a milisegundos.
Tipos de índices en MySQL
MySQL tiene varios tipos de índices, pero los más importantes que debes conocer son:
PRIMARY KEY: Es el índice más importante. Cada tabla debería tener uno y define la columna (o columnas) que identifican de forma única cada registro. MySQL lo crea automáticamente cuando defines una llave primaria.
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100),
correo VARCHAR(150)
);
SQL
INDEX (o KEY): Un índice regular para acelerar búsquedas en una columna. Puede haber valores duplicados.
UNIQUE INDEX: Similar al índice regular, pero garantiza que todos los valores en esa columna sean únicos, como un correo electrónico.
FULLTEXT INDEX: Diseñado para búsquedas de texto completo. Útil cuando necesitas buscar palabras dentro de columnas de tipo TEXT.
Cómo crear un índice
Puedes crear un índice al momento de crear la tabla:
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(200),
categoria_id INT,
precio DECIMAL(10,2),
INDEX idx_categoria (categoria_id),
UNIQUE INDEX idx_nombre (nombre)
);
SQL
O puedes agregar un índice a una tabla existente:
ALTER TABLE usuarios ADD INDEX idx_correo (correo);
ALTER TABLE usuarios ADD UNIQUE INDEX idx_correo_unico (correo);
CREATE INDEX idx_correo ON usuarios (correo);
SQL
Índices compuestos: Puedes crear un índice sobre múltiples columnas cuando frecuentemente buscas por varias condiciones juntas:
CREATE INDEX idx_nombre_ciudad ON usuarios (nombre, ciudad);
SQL
Cómo ver los índices de una tabla
Para ver qué índices tiene una tabla, usa:
SHOW INDEX FROM usuarios;
SQL
También puedes usar EXPLAIN para ver si MySQL está usando un índice en una consulta específica:
EXPLAIN SELECT * FROM usuarios WHERE correo = 'hola@8devmx.com';
SQL
Revisa la columna key en el resultado: si aparece el nombre de un índice, MySQL lo está usando. Si dice NULL, está haciendo un full table scan.
¿Cuándo NO usar índices?
Los índices no son gratuitos. Aunque aceleran las lecturas, tienen un costo:
- Ocupan espacio en disco: Cada índice es una estructura adicional que se almacena.
- Ralentizan escrituras: Cuando insertas, actualizas o eliminas registros, MySQL también tiene que actualizar todos los índices de esa tabla.
Los índices tienen más sentido en columnas que:
- Se usan frecuentemente en cláusulas
WHERE - Se usan en
JOINentre tablas - Se usan en
ORDER BYoGROUP BY - Tienen alta cardinalidad (muchos valores distintos)
Evita indexar columnas que se modifican constantemente o que tienen muy poca variedad de valores (como una columna status con solo 2 o 3 valores posibles).
Con esta base ya puedes empezar a optimizar tus bases de datos de forma inteligente. El uso correcto de índices es una de las diferencias más grandes entre una base de datos lenta y una que responde de forma ágil.