Ich habe einen Tisch mit 1,4 Milliarden Datensätzen. Die Tabellenstruktur ist wie folgt:
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
Die Anforderung besteht darin, einen Index über der Spalte zu erstellen text
.
Die Tischgröße beträgt ca. 34G.
Ich habe versucht, den Index mit der folgenden Anweisung zu erstellen:
ALTER TABLE text_page ADD KEY ix_text (text)
Nach 10 Stunden Wartezeit gebe ich diesen Ansatz endlich auf.
Gibt es eine praktikable Lösung für dieses Problem?
UPDATE : Es ist unwahrscheinlich, dass die Tabelle aktualisiert, eingefügt oder gelöscht wird. Der Grund für die Erstellung eines Index für die Spalte text
liegt darin, dass diese Art von SQL-Abfrage häufig ausgeführt wird:
SELECT page_id FROM text_page WHERE text = ?
UPDATE : Ich habe das Problem durch Partitionieren der Tabelle gelöst.
Der Tisch ist in 40 Teile auf einer Säule unterteilt text
. Das Erstellen des Index für die Tabelle dauert ungefähr 1 Stunde.
Es scheint, dass die Erstellung des MySQL-Index sehr langsam wird, wenn die Tabellengröße sehr groß wird. Durch die Partitionierung wird die Tabelle in kleinere Amtsleitungen aufgeteilt.
CREATE INDEX
Anweisung?