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