Ça dépend.
Variable # 1: Si MySQL choisit de construire le (s) index (s) à la volée, ou d'attendre que toutes les données soient entrées, alors faites un tri, etc., pour construire l'index. Remarque: les index UNIQUE (je pense) doivent être construits à la volée afin que l'UNIQUEness puisse être vérifié. La CLÉ PRIMAIRE pour InnoDB est stockée avec les données (ou vous pouvez l'indiquer vice versa), de sorte que DOIT être construit de manière aléatoire.
Variable # 2: L'index suit les données (par exemple AUTO_INCREMENT ou horodatage) par rapport à aléatoire (GUID, MD5), ou quelque part entre les deux (numéro de pièce, nom, friend_id).
Variable # 3 (si l'index est construit à la volée): l'index peut tenir dans le cache (key_buffer ou innodb_buffer_pool), ou il peut se répandre sur le disque.
Les index qui suivent les données sont efficaces et pratiquement linéaires, quelle que soit la réponse à # 1.
Les identifiants aléatoires sont une douleur. Si l'index ne tient pas dans le cache, le temps de le construire sera bien pire que linéaire, quelles que soient les autres variables. (Je ne suis pas d'accord avec Rolando dans ce cas.) Une énorme table InnoDB avec un GUID pour le PK est douloureusement lente à INSÉRER - planifiez 100 lignes / sec pour les disques ordinaires; peut-être 1000 si vous avez des SSD. LOAD DATA et batch INSERTs ne vous permettront pas de dépasser la lenteur du stockage aléatoire.
3,53 à 5,6 - peu de choses ont changé.
Plusieurs broches? L'entrelacement RAID est meilleur dans presque toutes les situations que d'attribuer manuellement ceci ici et cela là-bas. Le fractionnement manuel conduit à des situations déséquilibrées - une analyse de table est bloquée sur le disque de données; une opération d'index uniquement est bloquée sur le disque d'index; une requête isolée frappe d'abord le disque d'index, puis le disque de données (pas de chevauchement); etc.