Dipende.
Variabile n. 1: se MySQL sceglie di creare gli indici al volo o attendi che tutti i dati siano presenti, fai un ordinamento, ecc. Per creare l'indice. Nota: gli indici UNIQUE (penso) devono essere costruiti al volo in modo che UNIQUEness possa essere verificato. Il PRIMARY KEY per InnoDB è memorizzato con i dati (o è possibile dichiararlo viceversa), in modo che DEVE essere creato in modo casuale.
Variabile n. 2: L'indice tiene traccia dei dati (ad es. AUTO_INCREMENT o timestamp) rispetto a quelli casuali (GUID, MD5) o in un punto intermedio (numero parte, nome, friend_id).
Variabile n. 3 (se l'indice è creato al volo): l'indice potrebbe rientrare nella cache (key_buffer o innodb_buffer_pool) o potrebbe fuoriuscire sul disco.
Gli indici che tracciano i dati sono efficienti e praticamente lineari, indipendentemente dalla risposta al n. 1.
Gli ID casuali sono un dolore. Se l'indice non si adatta alla cache, il tempo per crearlo sarà molto peggio di quello lineare, indipendentemente dalle altre variabili. (Non sono d'accordo con Rolando in questo caso.) Un'enorme tabella InnoDB con un GUID per il PK è dolorosamente lenta da INSERIRE nel piano su 100 righe / sec per i dischi ordinari; forse 1000 se hai SSD. CARICARE DATI e INSERTI in batch non ti farà superare la lentezza della memorizzazione casuale.
Da 3.53 a 5.6 - non è cambiato molto.
Mandrini multipli? Lo striping RAID è migliore in quasi tutte le situazioni rispetto all'assegnazione manuale a questo e a quello lì. La suddivisione manuale porta a situazioni sbilanciate: una scansione della tabella è bloccata sul disco dati; un'operazione di solo indice è bloccata sul disco di indice; una query solitaria colpisce prima il disco indice, quindi il disco dati (nessuna sovrapposizione); eccetera.