To zależy.
Zmienna nr 1: Jeśli MySQL zdecyduje się na budowę indeksu (indeksów) w locie lub poczekaj, aż wszystkie dane będą w środku, wykonaj sortowanie itp., Aby zbudować indeks. Uwaga: indeksy UNIQUE (myślę) muszą być budowane w locie, aby można było zweryfikować UNIQUEness. KLUCZ PODSTAWOWY dla InnoDB jest przechowywany z danymi (lub można to powiedzieć odwrotnie), aby MUSI być budowany losowo.
Zmienna nr 2: Indeks śledzi dane (np. AUTO_INCREMENT lub znacznik czasu) w stosunku do losowej (GUID, MD5) lub gdzieś pomiędzy (numer części, imię i nazwisko, przyjaciel_id).
Zmienna nr 3 (jeśli indeks jest budowany „w locie”): Indeks może zmieścić się w pamięci podręcznej (bufor_klucza lub basen_wewnętrzny_bufor) lub może zostać rozlany na dysk.
Indeksy śledzące dane są wydajne i praktycznie liniowe, niezależnie od odpowiedzi na nr 1.
Losowe identyfikatory to ból. Jeśli indeks nie zmieści się w pamięci podręcznej, czas na jego zbudowanie będzie znacznie gorszy niż liniowy, niezależnie od innych zmiennych. (W tym przypadku nie zgadzam się z Rolando.) Ogromna tabela InnoDB z GUID dla PK jest boleśnie powolna, aby WSTAWIĆ do planu na 100 rzędach / s dla zwykłych dysków; może 1000, jeśli masz dyski SSD. ZAŁADUJ DANE i wsadowe WSTAWKI nie dadzą ci spokoju w przypadkowym przechowywaniu.
3.53 do 5.6 - niewiele się zmieniło.
Wiele wrzecion? Stripowanie RAID jest lepsze w prawie każdej sytuacji niż ręczne przypisywanie tego tu i tamtego. Ręczne dzielenie prowadzi do niezrównoważonych sytuacji - skanowanie tabeli utknęło na dysku danych; operacja tylko na indeksie utknęła na dysku indeksu; pojedyncze zapytanie najpierw trafia na dysk indeksu, a następnie dysk z danymi (bez nakładania się); itp.