Ich habe eine Antwort auf meine vorherige Frage zur Importgeschwindigkeit mit Inno-Tables (Überraschung!).
Szenario
Ich versuche, in angemessener Zeit einen großen * Datenbank-Dump auf meinen lokalen Entwicklungscomputer zu importieren. Wir haben viele KEY
s an den Tabellen angebracht, die sich als Engpass herausgestellt haben, aber für unser Live-System immer noch wichtig sind.
Nachdem ich oben eine Frage gestellt hatte, bestand mein Ansatz darin, KEY ...
Anweisungen aus den Dump-, Import- und Re-Add-Schlüsseln zu löschen .
Allerdings bearbeite ich häufig einen aktuellen Speicherauszug, um ihn lokal zu importieren, und bin auf diese lustigen "Kommentare" (The disable/enable keys
-lines) gestoßen.
--
-- Dumping data for table `monster`
--
LOCK TABLES `monster` WRITE;
/*!40000 ALTER TABLE `monster` DISABLE KEYS */;
INSERT … INSERT … INSERT
/*!40000 ALTER TABLE `monster` ENABLE KEYS */;
UNLOCK TABLES;
Tatsächlich handelt es sich bei diesen "Kommentaren" jedoch um bedingte MySql-Anweisungen
Das war eine Neuigkeit für mich, aber ok, angesichts des Ausgabeformulars mysql --version
sieht alles für mich gut aus:
mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3
Was ich annehme
Der Tisch ist gesperrt (gut, ich bin nur auf der Dev Mashine). Dann werden die im Tabellenschema definierten Schlüssel deaktiviert, Daten importiert und Schlüssel aktiviert.
Während der "Dateneinfügungs" -Phase sollte also keine Zeit mit Schlüsseln verschwendet werden, sondern nach dem Einfügen aller Daten überprüft werden.
Ich würde denken, dass dies das gleiche Verhalten ist, als würde ich alle KEY 'foo' (foo)'
Zeilen aus dem Dump löschen, den Dump importieren und anschließend ein Skript mit ausführen ADD KEY 'foo' ...
.
Was ich beobachte
Es ist viel schneller, die Schlüssel manuell zu löschen, Schlüssel zu importieren und erneut hinzuzufügen, als sich auf bedingte DISABLE KEYS
Anweisungen zu verlassen, die meine erstellt habenmysqldump
Manuelle Bearbeitung von Dump + MySQL-Import + Hinzufügen von Schlüsseln = 15 + 8 + 8 ≈ 30min
Einfacher MySQL-Import: aufgegeben (ich werde nur für 8 Stunden / Tag bezahlt> :))
Ich kann nicht anders, als zu denken, dass mir hier etwas sehr Grundlegendes fehlt (oder die Datenbank mich trollt).
mysqldump --innodb-optimize-keys
von Percona percona.com/doc/percona-server/5.5/management/… Langfristig: Verwenden Sie mysqldump nicht mehr und verwenden Sie mydumper oder xtrabackup.