No dijiste si se trataba de un sistema de prueba o de producción; Asumo que es producción.
Es probable que tenga la tabla a un tamaño en el que sus índices (o el lote completo) ya no caben en la memoria.
Esto significa que InnoDB debe leer páginas durante las inserciones (dependiendo de la distribución de los valores de índice de sus nuevas filas). Leer páginas (lecturas aleatorias) es realmente lento y debe evitarse si es posible.
La partición parece ser la solución más obvia, pero es posible que la partición de MySQL no se ajuste a su caso de uso.
Sin duda, debe considerar todas las opciones posibles:lleve la mesa a un servidor de prueba en su laboratorio para ver cómo se comporta.
Me parece que su clave principal no es necesaria (tiene otro índice único), por lo que eliminar esa es una opción.
Considere también el complemento y la compresión de innodb, esto hará que su innodb_buffer_pool vaya más allá.
Realmente necesita analizar sus casos de uso para decidir si realmente necesita conservar todos estos datos y si la partición es una solución sensata.
Es probable que cualquier cambio en esta aplicación presente nuevos problemas de rendimiento para sus usuarios, por lo que debe tener mucho cuidado aquí. Si encuentra una manera de mejorar el rendimiento de inserción, es posible que reduzca el rendimiento de búsqueda o el rendimiento de otras operaciones. Deberá realizar una prueba de rendimiento exhaustiva en el hardware de grado de producción antes de lanzar dicho cambio.