No estoy de acuerdo con algunas de las respuestas a esta pregunta.
¿Existen demasiados índices?
Por supuesto. No cree índices que no utilice ninguna de sus consultas. No cree índices redundantes. Utilice herramientas como pt-duplicate-key-checker y pt-index-use para ayudarlo a descubrir los índices que no necesita.
¿Qué acelerarán los índices?
- Condiciones de búsqueda en la cláusula WHERE.
- Condiciones de unión.
- Algunos casos de ORDER BY.
- Algunos casos de GROUP BY.
- Limitaciones ÚNICAS.
- Limitaciones FOREIGN KEY.
- Búsqueda de texto completo.
Otras respuestas han informado que INSERT / UPDATE / DELETE son más lentos cuanto más índices tenga. Eso es cierto, pero considere que muchos usos de UPDATE y DELETE también tienen cláusulas WHERE y en MySQL, UPDATE y DELETE también son compatibles con JOIN. Los índices pueden beneficiar estas consultas más que compensar la sobrecarga de actualizar índices.
Además, InnoDB bloquea las filas afectadas por una ACTUALIZACIÓN o ELIMINACIÓN. A esto lo llaman bloqueo a nivel de fila, pero en realidad es bloqueo a nivel de índice. Si no hay un índice para limitar la búsqueda, InnoDB tiene que bloquear muchas más filas que la fila específica que está cambiando. Incluso puede bloquear todas las filas de la tabla. Estos bloqueos bloquean los cambios realizados por otros clientes, incluso si lógicamente no entran en conflicto.
¿Cuándo es una buena idea agregar un índice?
Si sabe que necesita ejecutar una consulta que se beneficiaría de un índice en uno de los casos anteriores.
¿Cuándo es una mala idea agregar un índice?
Si el índice es un prefijo izquierdo de otro índice existente, o el índice no ayuda a ninguna de las consultas que necesita ejecutar.
¿Pros y contras de múltiples índices frente a índices de múltiples columnas?
En algunos casos, MySQL puede realizar una optimización de combinación de índices y unir o intersecar los resultados de búsquedas de índices independientes. Pero ofrece un mejor rendimiento para definir un solo índice, por lo que no es necesario realizar la combinación de índices.
Para uno de mis clientes de consultoría, definí un índice de varias columnas en una tabla de muchos a muchos donde no había índice, ¡y mejoré su consulta de combinación en un factor de 94 millones!
Diseñar los índices correctos es un proceso complejo, basado en las consultas que necesita optimizar . No debe establecer reglas generales como "indexar todo" o "indexar nada para evitar ralentizar las actualizaciones".
Vea también mi presentación Cómo diseñar índices, de verdad .