Por qué no debes usar consultas del tipo SHOW TABLES LIKE y cómo afectan al rendimiento

Vemos con frecuencia plugins de terceros que realizan consultas MySQL del tipo SHOW TABLES LIKE
, que no son una buena opción para el rendimiento, especialmente en entornos con una gran cantidad de tablas, como un WordPress Multisite con miles de sitios, por varias razones:
4 Razones por las que no usar SHOW TABLES LIKE en MySQL
1. Escaneo Completo de la Lista de Tablas
El comando SHOW TABLES LIKE
no usa índices y requiere que MySQL examine todas las tablas en la base de datos para encontrar coincidencias. En un multisite con miles de sitios, cada uno con múltiples tablas, esta operación se vuelve extremadamente costosa.
2. Carga en el Diccionario de Datos de MySQL
Cuando MySQL ejecuta SHOW TABLES
, accede al diccionario de datos donde almacena la información de todas las tablas. En bases de datos grandes, este diccionario puede crecer significativamente, haciendo que cada consulta de este tipo sea lenta.
3. Problemas de Bloqueo y Contención
- Si hay muchas consultas concurrentes que usan
SHOW TABLES LIKE
, se pueden experimentar bloqueos internos al acceder al diccionario de datos. - En sistemas con tráfico alto, esto puede afectar el rendimiento general de la base de datos.
4. Rendimiento Degradado en AWS Aurora y RDS
En AWS Aurora o RDS, donde MySQL está optimizado para escalabilidad, consultas como SHOW TABLES LIKE
pueden ser especialmente costosas porque MySQL distribuye la carga en múltiples nodos, y este tipo de operación obliga a revisar la estructura completa de las tablas en el nodo primario.
Alternativas más eficientes
Existen alternativas más eficientes si necesitas verificar si una tabla existe sin impactar el rendimiento:
1. Consultar information_schema.tables
con índice
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'nombre_de_la_base_de_datos'
AND table_name = 'tabla_a_comprobar';
✔️ Usa índices y evita escanear todas las tablas.
✔️ Es mucho más rápido en bases de datos con miles de tablas.
2. Intentar una consulta con EXISTS
Si solo necesitas saber si la tabla existe, una consulta de este tipo es más eficiente que SHOW TABLES
:
SELECT EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'nombre_de_la_base_de_datos'
AND table_name = 'tabla_a_comprobar'
) AS tabla_existe;
✔️ Devuelve 1
si la tabla existe o 0
si no.
✔️ No bloquea ni escanea innecesariamente.
3. Usar SELECT 1 FROM tabla LIMIT 1
Si quieres comprobar la existencia de una tabla y al mismo tiempo verificar si tiene datos:
SELECT 1 FROM tabla_a_comprobar LIMIT 1;
✔️ Si la tabla no existe, devuelve un error manejable.
✔️ Si existe y tiene datos, la consulta es casi instantánea.
Conclusión
El uso de SHOW TABLES LIKE
es problemático en bases de datos grandes porque obliga a MySQL a escanear todas las tablas sin usar índices, generando una carga innecesaria en el servidor. Usar information_schema.tables
o SELECT 1 FROM tabla LIMIT 1
son opciones mucho más eficientes y escalables.