Depende.
Variable n. ° 1: Si MySQL elige construir los índices sobre la marcha, o esperar hasta que todos los datos estén disponibles, haga una ordenación, etc., para construir el índice. Nota: los índices ÚNICOS (creo) deben construirse sobre la marcha para que se pueda verificar la UNICIDAD. La CLAVE PRIMARIA para InnoDB se almacena con los datos (o podría decirlo al revés), por lo que DEBE construirse aleatoriamente.
Variable n. ° 2: el índice rastrea los datos (por ejemplo, AUTO_INCREMENT o marca de tiempo) versus aleatorio (GUID, MD5), o en algún punto intermedio (número de parte, nombre, id_amigo).
Variable n. ° 3 (si el índice se crea sobre la marcha): el índice puede caber en la memoria caché (key_buffer o innodb_buffer_pool), o puede derramarse en el disco.
Los índices que rastrean los datos son eficientes y prácticamente lineales, independientemente de la respuesta al # 1.
Los identificadores aleatorios son un dolor. Si el índice no cabe en la memoria caché, el tiempo para construirlo será mucho peor que el lineal, independientemente de las otras variables. (No estoy de acuerdo con Rolando en este caso). Una enorme tabla de InnoDB con un GUID para la PK es dolorosamente lenta para INSERTAR en el plan en 100 filas / seg para discos ordinarios; quizás 1000 si tienes SSD. CARGAR DATOS e INSERTOS por lotes no lo llevará más allá de la lentitud del almacenamiento aleatorio.
3.53 a 5.6: no ha cambiado mucho.
Husillos múltiples? El trazado de bandas RAID es mejor en casi cualquier situación que asignar manualmente esto aquí y aquello allí. La división manual conduce a situaciones desequilibradas: una exploración de tabla está atascada en el disco de datos; una operación de solo índice está atascada en el disco de índice; una consulta solitaria golpea primero el disco índice, luego el disco de datos (sin superposición); etc.