
502 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
8.5.4 InnoDB-Tabellen erzeugen
Angenommen, Sie haben den MySQL-Client mit dem Befehl mysql test gestartet. Um eine
Tabelle im InnoDB-Format zu erzeugen, m¨ussen Sie im SQL-Befehl zur Tabellenerzeugung
TYPE = InnoDB angeben:
CREATE TABLE kunde (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
Dieser SQL-Befehl erzeugt eine Tabelle und einen Index auf die Spalte A im InnoDB-
Tabellenplatz (Tablespace), der aus den Daten-Dateien besteht, die Sie in ‘my.cnf’
angegeben haben. MySQL erzeugt zus¨atzlich eine Datei ‘kunde.frm’ im MySQL-
Datenbankverzeichnis ‘test’. Intern f¨ugt InnoDB seinem eigenen Datenw¨orterbuch einen
Eintrag f¨ur die Tabelle ’test/kunde’ hinzu. Wenn Sie daher eine Tabelle namens kunde
in einer anderen Datenbank von MySQL erzeugen, kollidieren die Tabellennamen innerhalb
InnoDB nicht.
Sie k¨onnen den freien Speicherplatz im InnoDB-Tabellenplatz (Tablespace) mit dem
Tabellen-Status-Befehl von MySQL f¨ur jede Tabelle, die Sie mit TYPE = InnoDB erzeugt
haben, abfragen. Die Menge freien Platzes im Tabellenplatz (Tablespace) erscheint im
Kommentar-Abschnitt der Tabelle in der Ausgabe von SHOW. Beispiel:
SHOW TABLE STATUS FROM test LIKE ’kunde’
Beachten Sie, dass die Statistiken, die SHOW ¨uber InnoDB-Tabellen ausgibt, nur
N¨aherungswerte sind: Sie werden f¨ur die SQL-Optimierung benutzt. Die f¨ur Tabelle und
Indexe reservierten Gr¨oßen in Bytes sind allerdings genau.
8.5.4.1 MyISAM-Tabellen in InnoDB-Tabellen umwandeln
InnoDB hat keine spezielle Optimierung f¨ur separate Index-Erzeugung. Daher lohnt es
sich nicht, die Tabelle zu exportieren und importieren und die Indexe danach zu erzeugen.
Die schnellste Art, eine Tabelle in InnoDB zu ¨andern, ist, die Einf¨ugungen direkt in eine
InnoDB-Tabelle vorzunehmen, das heißt, ALTER TABLE ... TYPE=INNODB zu benutzen oder
eine leere InnoDB-Tabelle mit identischen Definitionen zu nehmen und die Zeilen mit INSERT
INTO ... SELECT * FROM ... einzuf¨ugen.
Um eine bessere Kontrolle ¨uber den Einf¨ugeprozess zu erhalten, kann es besser sein, große
Tabellen in Teilst¨ucken einzuf¨ugen:
INSERT INTO neue_tabelle SELECT * FROM alte_tabelle WHERE schluessel > etwas
AND schluessel <= etwas_anderes;
Nachdem alle Daten eingef¨ugt wurden, k¨onnen Sie die Tabellen umbenennen.
W¨ahrend der Umwandlung großer Tabellen sollten Sie den InnoDB-Puffer-Pool hoch set-
zen, um Festplatten-Ein- und -Ausgaben zu verringern, allerdings nicht h¨oher als 80% des
physikalischen Arbeitsspeichers. Sie sollten die InnoDB-Log-Dateien Groß machen und auch
den Log-Puffer.
Stellen Sie sicher, dass Sie genug Tabellenplatz (Tablespace) haben! InnoDB-Tabellen
ben¨otigen viel mehr Platz als MyISAM-Tabellen. Wenn ein ALTER TABLE nicht mehr
genug Platz hat, wird ein Rollback gestartet, das Stunden dauern kann, wenn es auf
der Festplatte stattfindet. Bei Einf¨ugeoperationen verwendet InnoDB den Einf¨ugepuffer,
um sekund¨are Index-Datens¨atze mit Indexen in Stapeln zu vermischen. Das spart eine
Comentarios a estos manuales