Değişir.
Değişken # 1: MySQL, dizini anında oluşturmayı seçerse veya tüm veriler girilinceye kadar beklerse, dizini oluşturmak için bir sıralama vb. Yapın. Not: BENZERSİZ dizinler (sanırım) anında oluşturulmalıdır ki BENZERSİZLİK doğrulanabilir. InnoDB için PRIMARY KEY verilerle birlikte saklanır (ya da tam tersini söyleyebilirsiniz), bu yüzden rasgele oluşturulmalıdır ZORUNLU.
Değişken # 2: Dizin, verileri (örn. AUTO_INCREMENT veya zaman damgası) rastgele (GUID, MD5) veya aradaki bir yerde (parça numarası, ad, arkadaş_kimliği) izler.
Değişken # 3 (dizin anında oluşturulmuşsa): Dizin önbelleğe sığabilir (key_buffer veya innodb_buffer_pool) veya diske dökülebilir.
Verileri izleyen dizinler, # 1'in cevabından bağımsız olarak verimli ve neredeyse doğrusaldır.
Rastgele kimlikler bir acıdır. Dizin önbelleğe sığmazsa, diğer değişkenlerden bağımsız olarak dizini oluşturma süresi doğrusaldan çok daha kötü olacaktır. (Bu durumda Rolando ile aynı fikirde değilim.) PK için bir GUID ile büyük bir InnoDB tablo, sıradan diskler için 100 satır / sn plana INSERT için acı yavaş; SSD'leriniz varsa belki 1000. VERİ YÜKLEME ve toplu INSERT'ler rastgele depolamanın yavaşlığını geçmez.
3,53 ila 5,6 - pek bir şey değişmedi.
Birden fazla iğ? RAID şeritleme hemen hemen her durumda bunu buraya ve oraya manuel olarak atamaktan daha iyidir. Manuel bölme dengesiz durumlara yol açar - veri diskinde bir tablo taraması sıkışır; dizin diskinde salt dizin işlemi sıkıştı; yalnız bir sorgu önce dizin diskine, daha sonra veri diskine (çakışma olmaz) vurur; vb.