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 múltiples índices cubren las mismas columnas o cuando un índice es un 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 en columnas similares sufre la penalización de rendimiento de escritura cinco veces, mientras que un solo índice sería suficiente para la optimización de 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 los datos cambian. Los índices redundantes multiplican este coste sin proporcionar beneficios en las consultas. Una tabla con tres índices redundantes en user_id triplica la sobrecarga de escritura mientras que solo se utiliza un índice.
Costes de almacenamiento: Los índices consumen espacio en disco proporcional al tamaño de las columnas indexadas y al número de filas. Los índices redundantes desperdician almacenamiento que podría usarse para datos reales o índices útiles. Las tablas grandes con índices innecesarios pueden desperdiciar gigabytes de almacenamiento.
Complejidad de mantenimiento: Más índices significan más objetos que monitorizar, analizar y mantener. Los administradores de bases de datos dedican tiempo a optimizar índices que no aportan valor. Los planificadores de consultas tienen más opciones para evaluar, pudiendo elegir planes de ejecución subóptimos.
Ejemplos de código
❌ 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é es incorrecto: El índice en el correo electrónico es redundante porque idx_users_email_status comienza con Correo electrónico y puede manejar consultas filtrando solo por correo electrónico. De manera similar, idx_users_created es redundante con idx_users_created_status. Cada inserción o actualización en esta tabla actualiza cuatro índices cuando dos serían suficientes.
✅ 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é esto importa? Dos índices compuestos sirven para todos los patrones de consulta mientras eliminan la redundancia. Consultas que filtran por Correo electrónico solo utilizan el primer índice, y las consultas que filtran por created_at solo utilizan el segundo. El rendimiento de escritura mejora porque solo dos índices necesitan actualizaciones en lugar de cuatro.
Conclusión
Audita tus índices de base de datos regularmente para identificar los redundantes. Elimina los índices que sean prefijos de otros índices o que dupliquen la cobertura. Los índices compuestos pueden servir para consultas en sus columnas principales, eliminando la necesidad de índices de una sola columna separados en la mayoría de los casos.
.avif)
