MySQL tidak "membangun kembali" indeks pada setiap sisipan.
Ukuran halaman default MySQL adalah 16K. Ini mengalokasikan halaman-halaman ini dalam peningkatan 1MB (disebut luasan).
Ketika sebuah tabel pertama kali dibuat (indeks dibangun kembali), halaman terisi penuh 15/16, menyisakan ruang untuk beberapa sisipan acak (1k ruang). Jika entri indeks Anda masing-masing 500 byte (ukuran kunci utama + data baris untuk indeks berkerumun), itu menyisakan ruang untuk 2 baris baru untuk dimasukkan sebelum harus membagi halaman.
MySQL menyimpan nilai rekor tertinggi dan terendah di header halaman, sehingga catatan dalam rentang tertentu masuk ke halaman yang sama.
Ketika MySQL perlu menyisipkan satu baris pada satu halaman penuh, halaman tersebut harus dipisah. MySQL akan menambahkan halaman baru, dan memindahkan setengah dari data halaman ke halaman baru.
Dalam sebuah halaman, catatan mungkin tidak benar-benar dalam urutan fisik. Mereka akan berada dalam urutan mereka dimasukkan. Mereka ditautkan secara berurutan melalui bentuk daftar tertaut. Jadi, bahkan penyisipan acak, di luar kebutuhan untuk membagi halaman, tidak menyebabkan data dipindahkan secara fisik.
Setelah banyak sisipan acak, halaman Anda akan dari 1/2 penuh hingga penuh. Indeks dengan banyak halaman setengah penuh akan berdampak negatif pada kinerja membaca (Anda harus membaca dua halaman setengah penuh untuk membaca jumlah catatan yang sama dengan satu halaman penuh 15/16).
Sekarang, jika Anda menyisipkan baris dalam urutan indeks, maka MySQL hanya terus menambahkan ke akhir halaman, mengisinya 15/16 penuh, dan menambahkan batas setiap halaman. Penalti kinerja yang jauh lebih sedikit karena tidak ada pemisahan halaman, sehingga tidak ada pemindahan data yang terlibat, belum lagi manfaat kinerja baca dari hampir seluruh halaman.
Sisipan acak juga meningkatkan fragmentasi halaman, yang dapat memengaruhi kinerja membaca jika Anda sering membaca sejumlah besar catatan berurutan (jarang).
Selain itu, ubah buffering dapat memengaruhi Anda.