Thread MySQL Verständnisfrage: 100 Datensätze in eiem Schwung eintragen
(17 answers)
Opened by olruebe01 at 2007-01-03 18:47
Problem gelöst!!!!
Das Problem ist folgendes: Bei jedem INSERT (oder dem späteren EXECUTE dazu) werden alle Indizes neu erstellt. Ich habe eine Tabelle mit 3,6 Mio Zeilen, die 3 Indizes hat. Ich weiß nicht, ob das wichtig ist aber einer davon ist ein Fulltext über 4 Zellen. Könnte vielleicht besonders groß sein??? Egal... Wenn ich nun 300.000 neue Zeilen einfüge, werden also auch 300.000 mal alle Indizes überarbeitet. DAS DAUERT. ICh dachte, dass die Indizes am ende des Scripts EIN MAL überarbeitet werden. Ist aber nicht so. PQ`s Ansatz war also vollkommen richtig. Dennoch dauert das erstellen der neuen Indizes etwas (und in dieser Zeit wäre die Tabelle ohne Indizes) und so mache ich es nun folgender maßen: Ich erstelle eine TEMP-Tabelle. Eine exakte Kopie der orioginalen Tabelle, nur ohne Indizes. Hier trage ich nun alle(!) Daten ein. Das dauert bei 3,6 Mio Daten jetzt noch etwa 25 - 30 Minuten. Danach erstelle ich alle Indizes, was wieder etwa 10-15 Minuten dauert. Nun lösche ich die originale Tabelle (bis zu diesem Zeitpunkt war die originale Tabelle noch für alles zu gebrauchen - mit Indizes!!) und benenne die Temp-Tabelle in den Originalnamen um. Fertig. Vorteil: Für den Nutzer steht die originale Tabelle auch während des Updates voll zur Verfügung. Das Ganze dauert nun weniger als eine Stunde, was vorher einmal über 36 Stunden durchlief. Ich halte eine Stunde bei 3,6 Mio Zeilen für ok. Lieber wäre mir gewesen, nur die NEUEN Daten in eine Temptabelle zu schreiben und die gesamtem Daten aus der Temp-Tabelle in einem rutsch in die originale Tabelle zu kopieren... ..aber irgendwie habe ich das (noch) nicht hinbekommen. Es wurde immer nur EINE Zeile übernommen... Damit werde ich mich auseinenader Setzen, wenn ich mal ausgeschlafen habe. VIelen Dank mal wieder für die Hilfe!! Irgendwann schicke ich euch allen einen Kasten Bier :-) |