Firasat saya adalah bahwa dengan unsigned int dan varchar 40 (terutama varchar!) Anda sekarang memiliki kunci utama BESAR dan itu membuat file indeks Anda terlalu besar untuk muat di RAM apa pun yang Anda miliki untuk Innodb_buffer_pool. Ini akan membuat InnoDB harus bergantung pada disk untuk menukar halaman indeks saat pencarian dan itu BANYAK pencarian disk dan tidak banyak pekerjaan CPU.
Satu hal yang saya lakukan untuk masalah serupa adalah menggunakan sesuatu di antara kunci yang benar-benar alami dan kunci pengganti. Kami akan mengambil 2 bidang yang sebenarnya unik (salah satunya juga varchar) dan di lapisan aplikasi akan membuat hash MD5 lebar tetap dan menggunakan ITU sebagai kuncinya. Ya, itu berarti lebih banyak pekerjaan untuk aplikasi tetapi itu membuat file indeks jauh lebih kecil karena Anda tidak lagi menggunakan bidang panjang arbitrer.
ATAU, Anda bisa saja menggunakan server dengan banyak RAM dan melihat apakah itu membuat indeks muat di memori, tetapi saya selalu ingin menjadikan 'melempar perangkat keras' sebagai pilihan terakhir :)