Respuesta corta:
Los índices aceleran SELECT
's y ralentizar INSERT
's.
Por lo general, es mejor tener índices, porque aceleran select
más de lo que ralentizan insert
.
En una UPDATE
el índice puede acelerar las cosas muy arriba si se usa un campo indexado en WHERE
cláusula y ralentiza las cosas si update
uno de los campos indexados.
¿Cómo saber cuándo usar un índice?
Agregar EXPLAIN
delante de tu SELECT
declaración.
Así:
EXPLAIN SELECT * FROM table1
WHERE unindexfield1 > unindexedfield2
ORDER BY unindexedfield3
Le mostrará cuánto trabajo tendrá que hacer MySQL en cada uno de los campos no indexados.
Uso esa información puedes decidir si vale la pena agregar índices o no.
Explicar también puede decirle si es mejor colocar e indexar
EXPLAIN SELECT * FROM table1
WHERE indexedfield1 > indexedfield2
ORDER BY indexedfield3
Si se seleccionan muy pocas filas o MySQL decide ignorar el índice (lo hace de vez en cuando) entonces también podría descartar el índice, porque es ralentizando tu insert
s pero no acelerando su select
's.
Por otra parte, también podría ser que su declaración de selección no sea lo suficientemente inteligente.
(Perdón por la complejidad de la respuesta, estaba tratando de mantenerlo simple, pero fallé).
Enlace:
Índices de MySQL:¿cuáles son las mejores prácticas?