Explica por qué añadir más índices a una base de datos relacional no siempre es beneficioso para acelerar las cargas de trabajo.
A alto nivel, un índice sobre una tabla concreta puede acelerar la ejecución de una consulta que acceda a la tabla, siempre que la consulta haga referencia a un subconjunto compatible de columnas que cubra el índice y que el coste de utilizar el índice sea inferior al de las alternativas (por ejemplo, simplemente escanear toda la tabla o utilizar otro índice). Al mismo tiempo, el índice debe mantenerse actualizado con la tabla, lo que significa que cada actualización de la tabla (inserción o eliminación de nuevas filas, o actualizaciones de filas existentes para las columnas que cubre el índice) costará más, ya que el sistema de base de datos relacional también tiene que propagar la actualización al índice. Por tanto, la utilidad de añadir un índice a una carga de trabajo dependerá de la fracción de consultas que puedan beneficiarse del índice, y de la mezcla de consultas y actualizaciones.
Please explain why adding more indexes to a relational database is not always beneficial for speeding up workloads.
At a high level, an index over a specific table can speed up the execution of a query that accesses the table provided that the query references a compatible subset of columns that the index covers and that the cost of using the index is lower than alternatives (e.g., simply scanning the whole table or using another index). At the same time, the index needs to be kept up-to-date with the table, which means that each table update (insertion or deletion of new rows, or updates to existing rows for the columns that the index covers) will now cost more as the relational database system has to also propagate the update to the index. Thus, the usefulness of adding an index to a workload will depend on the fraction of queries that can benefit from the index, and on the mix of queries and updates.