Tergantung.
Variabel # 1: Jika MySQL memilih untuk membuat indeks dengan cepat, atau menunggu sampai semua data masuk, maka lakukan pengurutan, dll, untuk membuat indeks. Catatan: indeks UNIQUE (saya pikir) harus dibangun dengan cepat sehingga UNIQUEness dapat diverifikasi. KUNCI UTAMA untuk InnoDB disimpan dengan data (atau Anda dapat menyatakannya sebaliknya), sehingga HARUS dibangun secara acak.
Variabel # 2: Indeks melacak data (mis. AUTO_INCREMENT atau timestamp) versus acak (GUID, MD5), atau di suatu tempat di antaranya (nomor bagian, nama, friend_id).
Variabel # 3 (jika indeks dibangun dengan cepat): Indeks mungkin cocok dengan cache (key_buffer atau innodb_buffer_pool), atau mungkin tumpah ke disk.
Indeks yang melacak data efisien, dan hampir linier, terlepas dari jawaban # 1.
Id acak adalah rasa sakit. Jika indeks tidak muat di cache, waktu pembuatannya akan jauh lebih buruk daripada linear, terlepas dari variabel lainnya. (Saya tidak setuju dengan Rolando dalam kasus ini.) Tabel InnoDB besar dengan GUID untuk PK sangat lambat untuk MASUK ke dalam - rencana pada 100 baris / detik untuk disk biasa; mungkin 1000 jika Anda memiliki SSD. LOAD DATA dan INSERT batched tidak akan membuat Anda melewati kelambatan penyimpanan acak.
3,53 hingga 5,6 - tidak banyak yang berubah.
Banyak spindle? RAID striping lebih baik di hampir semua situasi daripada menetapkannya secara manual di sini dan di sana. Pemisahan manual menyebabkan situasi tidak seimbang - pemindaian tabel macet di disk data; operasi indeks saja terjebak pada disk indeks; permintaan tunggal pertama-tama mengenai disk indeks, kemudian disk data (tidak ada tumpang tindih); dll.