По-разному.
Переменная # 1: Если MySQL решает построить индекс (ы) на лету или подождать, пока все данные не будут введены, выполните сортировку и т. Д., Чтобы построить индекс. Примечание: УНИКАЛЬНЫЕ индексы (я думаю) должны быть построены на лету, чтобы УНИКАЛЬНОСТЬ могла быть проверена. ПЕРВИЧНЫЙ КЛЮЧ для InnoDB хранится с данными (или вы могли бы заявить об этом наоборот), так что ДОЛЖЕН быть построен случайным образом.
Переменная # 2: Индекс отслеживает данные (например, AUTO_INCREMENT или метка времени) в зависимости от случайного (GUID, MD5) или где-то посередине (номер детали, имя, friend_id).
Переменная # 3 (если индекс создается на лету): индекс может помещаться в кэш (key_buffer или innodb_buffer_pool) или может пролиться на диск.
Индексы, которые отслеживают данные, являются эффективными и практически линейными, независимо от ответа на # 1.
Случайные идентификаторы - это боль. Если индекс не помещается в кеше, время его создания будет намного хуже линейного, независимо от других переменных. (Я не согласен с Роландо в этом случае.) Огромная таблица InnoDB с GUID для PK мучительно медленна для INSERT в план на 100 строк / сек для обычных дисков; возможно 1000, если у вас есть SSD. ЗАГРУЗКА ДАННЫХ и пакетные вставки не избавят вас от медлительности случайного хранения.
3,53 - 5,6 - мало что изменилось.
Несколько шпинделей? Чередование RAID лучше практически в любой ситуации, чем ручное назначение этого здесь и этого туда. Ручное разбиение приводит к неуравновешенным ситуациям - сканирование таблицы застревает на диске с данными; операция только для индекса застревает на диске индекса; одиночный запрос сначала попадает на индексный диск, затем на диск с данными (без перекрытия); и т.п.