Kodi en 2026: qué ha cambiado durante el último año y cuál es su futuro
Los índices en MySQL son una de las claves más importantes para mejorar el rendimiento de las consultas SQL. Sin embargo, no siempre se usan correctamente, especialmente cuando entran en juego operadores como LIKE, BETWEEN o consultas con varias condiciones.
En esta guía completa aprenderás qué son los índices, cuándo se usan, cómo afectan los LIKE al rendimiento, cómo interpretarlos con EXPLAIN y cómo saber si un índice es único. Todo explicado de forma clara, sencilla y orientada a exámenes DAM/ASIR y a la práctica real.
Un índice es una estructura que permite a MySQL encontrar datos más rápido, evitando recorrer toda la tabla fila por fila.
Es muy parecido al índice de un libro: no lees todo, vas directamente a la página que te interesa.
Sin índices:
MySQL hace un escaneo completo de la tabla (ALL)
Consultas lentas en tablas grandes
Con índices:
Acceso rápido a los datos
Menor número de filas leídas
Mejor rendimiento
Siempre es único
No admite valores NULL
Solo puede existir uno por tabla
Garantiza que no haya valores duplicados
Puede haber varios por tabla
Puede admitir NULL (según motor)
No es único
Permite valores duplicados
Se usa para acelerar búsquedas
No.
El índice primario es único, pero no es el único índice que puede ser único.
También existen los índices UNIQUE, que igualmente garantizan unicidad.
El índice primario es único, pero además existen índices UNIQUE que también garantizan la unicidad de los datos.
El operador LIKE se usa para buscar patrones de texto, pero no siempre permite usar índices.
Busca por prefijo
MySQL puede usar índice
Tipo de acceso: range
% al inicio
MySQL no puede predecir el inicio
Escaneo completo de tabla
Ejemplo:
Aunque ambos LIKE estén bien escritos:
MySQL solo puede usar un índice
El otro filtro se aplica después
Esto se conoce como uso parcial del índice.
1 LIKE 'texto%' → índice OK
2 LIKE 'texto%' → índice usado a medias
%texto% → sin índice
Un índice compuesto:
Solo se aprovecha completamente si:
El primer campo está fijado (=)
Solo hay un rango
Dos LIKE generan dos rangos, por lo que el índice compuesto no se aprovecha entero.
EXPLAIN muestra cómo MySQL ejecuta una consulta.
Índice que se usa realmente
NULL → no se usa índice
Índices que podría usar
range → correcto con LIKE
ALL → escaneo completo
Número estimado de filas leídas
Cuanto menor, mejor
Columna clave: Non_unique
0 → índice único
1 → índice no único
Ahí verás:
PRIMARY KEY
UNIQUE KEY
KEY
Evita % al inicio
Usa un solo LIKE cuando sea posible
Prioriza valores exactos (=)
Usa índices compuestos con cabeza bien definida
Analiza siempre con EXPLAIN
Un índice compuesto:
Solo se aprovecha completamente si:
El primer campo está fijado (=)
Solo hay un rango
Dos LIKE generan dos rangos, por lo que el índice compuesto no se aprovecha entero.
EXPLAIN muestra cómo MySQL ejecuta una consulta.
Índice que se usa realmente
NULL → no se usa índice
Índices que podría usar
range → correcto con LIKE
ALL → escaneo completo
Número estimado de filas leídas
Cuanto menor, mejor
Columna clave: Non_unique
0 → índice único
1 → índice no único
Ahí verás:
PRIMARY KEY
UNIQUE KEY
KEY
Cuando las búsquedas con LIKE no son suficientes o empiezan a ser lentas, MySQL ofrece alternativas mucho más eficientes para trabajar con texto y múltiples columnas.
Un índice compuesto está formado por varias columnas en un mismo índice:
MySQL solo aprovecha correctamente un índice compuesto si:
Se filtra por la primera columna del índice
La primera columna usa igualdad (=)
Solo hay un rango (LIKE, BETWEEN)
Ejemplo óptimo:
Ejemplo NO óptimo:
Aquí hay dos rangos, por lo que el índice compuesto no se aprovecha completamente.
Igualdad primero (=)
Rango después (LIKE, BETWEEN)
Cuando necesitas buscar palabras dentro de textos largos (descripciones, artículos, posts), LIKE deja de ser eficiente.
Para eso existe el índice FULLTEXT.
Mucho más rápido que LIKE '%texto%'
Permite búsquedas por relevancia
Ideal para blogs, artículos y descripciones
Las búsquedas FULLTEXT se hacen con MATCH ... AGAINST:
Busca por relevancia
Ordena resultados automáticamente
Ideal para buscadores internos
Permite operadores avanzados
Operadores comunes:
+ obligatorio
- excluir
* comodín
| Característica | LIKE | FULLTEXT |
|---|---|---|
| Usa índice | A veces | Sí |
| % al inicio | No eficiente | No necesario |
| Relevancia | No | Sí |
| Textos largos | Malo | Excelente |
LIKE 'texto%' → búsquedas simples
Índices compuestos → filtros por varias columnas
FULLTEXT + MATCH AGAINST → buscadores y texto largo
En SQL (especialmente MySQL), cuando hablamos de CREATE INDEX, hay varios tipos de índices. Te los enumero y te pongo ejemplos claros.
Es el más básico.
Sirve para acelerar búsquedas, pero permite valores repetidos.
CREATE INDEX idx_nombre
ON clientes(nombre);
Se usa cuando buscas mucho por nombre.
No permite valores duplicados en la columna.
CREATE UNIQUE INDEX idx_email
ON usuarios(email);
Ideal para emails, DNI, usuario, etc.
Es un índice especial:
No admite NULL
No admite duplicados
Solo puede haber uno por tabla
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50)
);
MySQL crea el índice automáticamente.
Usa más de una columna en el mismo índice.
CREATE INDEX idx_nombre_ciudad
ON clientes(nombre, ciudad);
Muy útil cuando haces:
WHERE nombre = 'Ana' AND ciudad = 'Madrid'Se usa para búsquedas de texto (palabras, frases).
CREATE FULLTEXT INDEX idx_descripcion
ON productos(descripcion);
Se usa con:
SELECT *
FROM productos
WHERE MATCH(descripcion) AGAINST('oferta');Cuando creas una clave foránea, MySQL crea un índice automáticamente.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
Ayuda a que las relaciones sean rápidas.
| Tipo de índice | ¿Duplicados? | Uso principal |
|---|---|---|
| INDEX | Sí | Búsquedas normales |
| UNIQUE | No | Valores únicos |
| PRIMARY KEY | No | Identificador principal |
| Compuesto | Depende | Varias columnas |
| FULLTEXT | Sí | Búsqueda por texto |
| FOREIGN KEY | Sí | Relaciones entre tablas |
No lo rompen, pero MySQL solo usará uno de ellos.
Sí, además de garantizar unicidad, acelera búsquedas.
Que MySQL no está usando ningún índice.
No. LIKE 'texto%' es perfectamente válido y eficiente
Entender cómo funcionan los índices y el operador LIKE es fundamental para escribir consultas eficientes en MySQL. Saber interpretar EXPLAIN, distinguir índices únicos y normales, y evitar errores comunes marca la diferencia tanto en exámenes como en proyectos reales.
Si trabajas con bases de datos grandes, los índices no son opcionales: son obligatorios.
Seguir leyendo:
Comentarios
Publicar un comentario