Regla
Evite redundante base de datos redundantes.
La superposición de base de datos índices de bases de datos desperdician
almacenamiento y ralentizan ralentizan escribe.
Lenguajes compatibles: SQLIntroducción
Los índices redundantes se producen cuando varios índices cubren las mismas columnas o cuando un índice es prefijo de otro. Cada índice consume espacio en disco y debe actualizarse en las operaciones INSERT, UPDATE y DELETE. Una tabla con cinco índices superpuestos sobre columnas similares paga cinco veces la penalización de rendimiento de escritura, mientras que un solo índice bastaría para optimizar la lectura.
Por qué es importante
Impacto en el rendimiento: Cada índice ralentiza las operaciones de escritura porque la base de datos debe actualizar todos los índices cuando cambian los datos. Los índices redundantes multiplican este coste sin aportar ventajas a la consulta. Una tabla con tres índices redundantes en usuario_id triplica la sobrecarga de escritura mientras que sólo se utiliza un índice.
Costes de almacenamiento: Los índices consumen un espacio en disco proporcional al tamaño de las columnas indexadas y al número de filas. Los índices redundantes desperdician espacio de almacenamiento que podría utilizarse para datos reales o índices útiles. Las tablas grandes con índices innecesarios pueden desperdiciar gigabytes de almacenamiento.
Complejidad del mantenimiento: Más índices significa más objetos que supervisar, analizar y mantener. Los administradores de bases de datos dedican tiempo a optimizar índices que no aportan ningún valor. Los planificadores de consultas tienen más opciones que evaluar, pudiendo elegir planes de ejecución subóptimos.
Ejemplos de códigos
❌ No conforme:
-- Índices redundantes en la tabla users
CREAR INDEX idx_users_email ON users(email);
CREAR INDEX idx_users_email_status ON users(email, status);
CREAR INDEX idx_users_created ON users(created_at);
CREAR INDEX idx_users_created_status ON users(created_at, status);
-- Los índices de una sola columna son redundantes porque
-- los índices compuestos pueden servir para las mismas consultas
Por qué está mal: El índice del correo electrónico es redundante porque idx_users_email_status comienza con correo electrónico y puede gestionar consultas filtrando sólo por correo electrónico. De forma similar, idx_usuarios_creados es redundante con idx_users_created_status. Cada inserción o actualización de esta tabla actualiza cuatro índices cuando bastaría con dos.
✅ Conforme:
-- Índices optimizados en la tabla users
CREAR INDEX idx_users_email_status ON users(email, status);
CREAR INDEX idx_users_created_status ON users(created_at, status);
-- Los índices compuestos pueden servir consultas sobre sus columnas prefijadas
-- Las consultas sólo sobre email usan idx_users_email_status
-- Las consultas sólo sobre created_at utilizan idx_users_created_status
Por qué es importante: Dos índices compuestos sirven para todos los patrones de consulta y eliminan la redundancia. Las consultas filtradas por correo electrónico sólo utilizan el primer índice, y las consultas que filtran por fecha_de_creación sólo utilizan el segundo. El rendimiento de escritura mejora porque sólo hay que actualizar dos índices en lugar de cuatro.
Conclusión
Audite regularmente los índices de su base de datos para identificar los redundantes. Elimine los índices que sean prefijos de otros índices o que dupliquen la cobertura. Los índices compuestos pueden servir consultas en sus columnas principales, eliminando la necesidad de índices separados de una sola columna en la mayoría de los casos.
.avif)
