Es hängt davon ab, ob.
Variable # 1: Wenn MySQL den oder die Index (e) im laufenden Betrieb erstellt oder wartet, bis alle Daten vorhanden sind, dann sortiert usw., um den Index zu erstellen. Hinweis: (Ich denke) EINZIGARTIGE Indizes müssen im laufenden Betrieb erstellt werden, damit die EINZIGARTIGKEIT überprüft werden kann. Der PRIMARY KEY für InnoDB wird mit den Daten gespeichert (oder Sie können es auch andersherum angeben), sodass MUSS zufällig erstellt werden.
Variable Nr. 2: Der Index verfolgt die Daten (z. B. AUTO_INCREMENT oder Zeitstempel) gegenüber zufällig (GUID, MD5) oder irgendwo dazwischen (Teilenummer, Name, friend_id).
Variable # 3 (wenn der Index direkt erstellt wird): Der Index passt möglicherweise in den Cache (key_buffer oder innodb_buffer_pool) oder wird auf die Festplatte übertragen.
Indizes, die die Daten verfolgen, sind unabhängig von der Antwort auf # 1 effizient und nahezu linear.
Zufällige IDs sind ein Schmerz. Wenn der Index nicht in den Cache passt, ist die Erstellungszeit ungeachtet der anderen Variablen viel schlechter als linear. (In diesem Fall bin ich mit Rolando nicht einverstanden.) Eine riesige InnoDB-Tabelle mit einer GUID für die PK ist schmerzhaft langsam, um sie einzufügen - planen Sie mit 100 Zeilen / Sek. Für normale Festplatten; vielleicht 1000, wenn Sie SSDs haben. LOAD DATA und Batched INSERTs bringen Sie nicht über die Langsamkeit des zufälligen Speichers hinaus.
3,53 bis 5,6 - nicht viel hat sich geändert.
Mehrfachspindeln? RAID-Striping ist in fast jeder Situation besser, als dies hier und das dort manuell zuzuweisen. Manuelle Aufteilung führt zu unausgeglichenen Situationen - ein Tabellenscan bleibt auf der Datenplatte hängen; Eine Nur-Index-Operation bleibt auf der Indexplatte hängen. eine einsame Abfrage trifft zuerst auf die Indexplatte, dann auf die Datenplatte (keine Überlappung); etc.