Salut.
Plein de gens : ça, oui
Compétent : parfois
Conviviaux : ça c'est moins souvent
Bon, sinon, là, comme ça, c'est pas trop évident de répondre.
Dans un premier temps, tu peux vérifier les éléments ci-dessous :
L'index est-il bien en CLUSTER ? (données ordonnée pas seulement dans l'arbre, mais aussi au niveau physique sur le disque). Ca change carrément les performances. Sous SQL Server, c'est la valeur par défaut d'un index sur une PK, mais je ne sais pas comment se comporte MySQL par défaut.
Tu peux essayer de recalculer l'index. Je n'ai pas le code en tête, car différent d'un SGBD à l'autre. Reporte-toi à la doc de MySQL pour savoir comment le faire manuellement. Normalement, c'est automatique, sauf indications contraires. A froid, je dirais qu'un simple "OPTIMIZE" ne suffit pas. Si tu ne trouves pas, tu peux toujours détruire l'index et le recréer dans la foulée, il est forcément populé à la création (sauf indication explicite contraire)
Ensuite, lors des updates, as-tu des processes succeptibles de faire des modifications en même temps, ou même des select ? Les seclect sont-ils "one shot", ou restent-ils actifs tant que tout le curseur n'est pas lu ? Dans ce cas, sont-ils dynamiques ou statiques ? En effet, si ce sont des curseurs statiques, alors il se produit un LOCK sur la table jusqu'à la fin du traîtement, afin de garantir une vue statique des données (qui ne changent pas d'une lecture à l'autre d'un passage à l'autre dans le curseur).
Sinon, le coup du "le insert est pourtant rapide", c'est normal. Je présume que ton ID est autoincrément. MySQL gère ce type de champ d'une façon différente de la plupart des SGBD : la nouvelle valeur crée est forcément inexistante dans la table, par conséquent, il n'y a pas de CHECK dans l'index pour vérifier son existance lors de l'insertion. Donc en cas de problème d'index, ça n'influe en rien sur les perfs.
Courage !