Índices en MySQL y el uso de LIKE: guía completa
Índices en MySQL y el uso de LIKE: guía completa
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.
¿Qué es un índice en MySQL?
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
Tipos de índices en MySQL
Índice primario (PRIMARY KEY)
Siempre es único
No admite valores
NULLSolo puede existir uno por tabla
Índice único (UNIQUE)
Garantiza que no haya valores duplicados
Puede haber varios por tabla
Puede admitir
NULL(según motor)
Índice normal (INDEX o KEY)
No es único
Permite valores duplicados
Se usa para acelerar búsquedas
¿Los índices primarios son los únicos índices únicos?
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 y los índices
El operador LIKE se usa para buscar patrones de texto, pero no siempre permite usar índices.
LIKE que SÍ usa índice
Busca por prefijo
MySQL puede usar índice
Tipo de acceso:
range
LIKE que NO usa índice
%al inicioMySQL no puede predecir el inicio
Escaneo completo de tabla
¿Qué pasa cuando usamos dos LIKE en la misma consulta?
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.
Regla mental rápida
1
LIKE 'texto%'→ índice OK2
LIKE 'texto%'→ índice usado a medias%texto%→ sin índice
Índices compuestos y LIKE
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.
Cómo saber si una consulta usa índice: EXPLAIN
EXPLAIN muestra cómo MySQL ejecuta una consulta.
Columnas clave que debes mirar
key
Índice que se usa realmente
NULL→ no se usa índice
possible_keys
Índices que podría usar
type
range→ correcto con LIKEALL→ escaneo completo
rows
Número estimado de filas leídas
Cuanto menor, mejor
Cómo saber si un índice es único
Opción 1: SHOW INDEX
Columna clave: Non_unique
0→ índice único1→ índice no único
Opción 2: Ver la tabla directamente
Ahí verás:
PRIMARY KEYUNIQUE KEYKEY
Buenas prácticas con índices y LIKE
Evita
%al inicioUsa un solo
LIKEcuando sea posiblePrioriza valores exactos (
=)Usa índices compuestos con cabeza bien definida
Analiza siempre con
EXPLAIN
Índices compuestos y LIKE
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.
Cómo saber si una consulta usa índice: EXPLAIN
EXPLAIN muestra cómo MySQL ejecuta una consulta.
Columnas clave que debes mirar
key
Índice que se usa realmente
NULL→ no se usa índice
possible_keys
Índices que podría usar
type
range→ correcto con LIKEALL→ escaneo completo
rows
Número estimado de filas leídas
Cuanto menor, mejor
Cómo saber si un índice es único
Opción 1: SHOW INDEX
Columna clave: Non_unique
0→ índice único1→ índice no único
Opción 2: Ver la tabla directamente
Ahí verás:
PRIMARY KEYUNIQUE KEYKEY
Optimización avanzada: MATCH, AGAINST, índices compuestos y FULLTEXT
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.
Índices compuestos: cuándo y cómo usarlos
Un índice compuesto está formado por varias columnas en un mismo índice:
Cómo funciona un índice compuesto
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.
Regla mental
Igualdad primero (
=)Rango después (
LIKE,BETWEEN)
Búsquedas de texto avanzadas: FULLTEXT
Cuando necesitas buscar palabras dentro de textos largos (descripciones, artículos, posts), LIKE deja de ser eficiente.
Para eso existe el índice FULLTEXT.
Ventajas de FULLTEXT
Mucho más rápido que
LIKE '%texto%'Permite búsquedas por relevancia
Ideal para blogs, artículos y descripciones
MATCH y AGAINST: cómo funcionan
Las búsquedas FULLTEXT se hacen con MATCH ... AGAINST:
Modos de búsqueda
NATURAL LANGUAGE MODE
Busca por relevancia
Ordena resultados automáticamente
Ideal para buscadores internos
BOOLEAN MODE
Permite operadores avanzados
Operadores comunes:
+obligatorio-excluir*comodín
FULLTEXT vs LIKE
| Característica | LIKE | FULLTEXT |
|---|---|---|
| Usa índice | A veces | Sí |
| % al inicio | No eficiente | No necesario |
| Relevancia | No | Sí |
| Textos largos | Malo | Excelente |
Cuándo usar cada cosa
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.
INDEX (índice normal)
Es el más básico.
Sirve para acelerar búsquedas, pero permite valores repetidos.
Ejemplo
Se usa cuando buscas mucho por nombre.
UNIQUE INDEX (índice único)
No permite valores duplicados en la columna.
Ejemplo
Ideal para emails, DNI, usuario, etc.
PRIMARY KEY (clave primaria)
Es un índice especial:
-
No admite
NULL -
No admite duplicados
-
Solo puede haber uno por tabla
Ejemplo
MySQL crea el índice automáticamente.
INDEX compuesto (índice de varias columnas)
Usa más de una columna en el mismo índice.
Ejemplo
Muy útil cuando haces:
FULLTEXT INDEX
Se usa para búsquedas de texto (palabras, frases).
Ejemplo
Se usa con:
INDEX en clave foránea (FOREIGN KEY)
Cuando creas una clave foránea, MySQL crea un índice automáticamente.
Ejemplo
Ayuda a que las relaciones sean rápidas.
Resumen rápido
| 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 |
Preguntas frecuentes (FAQ)
¿Dos LIKE siempre rompen el índice?
No lo rompen, pero MySQL solo usará uno de ellos.
¿Un índice UNIQUE mejora el rendimiento?
Sí, además de garantizar unicidad, acelera búsquedas.
¿Qué significa key = NULL en EXPLAIN?
Que MySQL no está usando ningún índice.
¿LIKE siempre es malo?
No. LIKE 'texto%' es perfectamente válido y eficiente
El uso de los indices
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:
- Cómo crear un USB booteable de Linux Mint 20.1 paso a paso
- Cómo instalar Linux Mint 20.1 en VirtualBox paso a paso
- Solución: Teclado y ratón no funcionan al instalar Windows 7

Comentarios
Publicar un comentario