Datenbankgröße MyISAM vs. InnoDB

Servus!
Folgendes Szenario mit xampp unter Windows:
Ich habe zwei strukturell gleiche Datenbanken „jobs“ und „jobs2“. Einziger Unterschied: jobs hat MyISAM als Engine, jobs2 InnoDB. Wenn ich in die (bis dato leere) jobs2-Tabelle über „INSERT INTO jobs2 SELECT * FROM jobs“ haben beide exakt die selbe Menge an Datensätzen.
Schaue ich jetzt aber ins Filesystem, ist jobs ca. 6,2 MB groß, jobs2 aber gerade mal lächerliche 34 KB!!!

Wie ist das denn bitte möglich???

Außerdem: Gibt es Performance-Unterschiede zwischen den beiden Engines (gerade bei Tabellen mit über 100k Datansätzen)?

Hallo Kalle,

Ich habe zwei strukturell gleiche Datenbanken „jobs“ und
„jobs2“. Einziger Unterschied: jobs hat MyISAM als Engine,
jobs2 InnoDB. Wenn ich in die (bis dato leere) jobs2-Tabelle
über „INSERT INTO jobs2 SELECT * FROM jobs“ haben beide exakt
die selbe Menge an Datensätzen.
Schaue ich jetzt aber ins Filesystem, ist jobs ca.
6,2 MB groß, jobs2 aber gerade mal
lächerliche 34 KB!!!

Wie ist das denn bitte möglich???

Wie das möglich ist lasse ich jetzt einfach mal den nächsten erklären, aber eigentlich habe ich gelernt, daß InnoDB den größeren Speicherbedarf hat, aber gut, vielleicht war das eben nur die Theorie.
Aber ich würde bei der Entscheidung InnoDB oder MyISAM den Speicherbedarf erst als letztes Kriterium heranziehen. InnoDB hat einige Möglichkeiten, die MyISAM nicht hat, z.B. Transaktionen, Foreign key constraints, Sperren auf row-Ebene usw. Wenn Du das brauchst ist der Speicherverbrauch egal.

Außerdem: Gibt es Performance-Unterschiede zwischen den beiden
Engines (gerade bei Tabellen mit über 100k Datansätzen)?

Ja, solche Funktionen bei InnoDB hat natürlich ihren Preis, d.h. ist InnoDB langsamer. Ob das spürbar wird, müsstest Du mal austesten.
Ein paar ausgeführte Tests zur Geschwindigkeit:
http://blog.kapsobor.de/archives/2006/09/18/myisam_v…
Noch mehr Kriterien gibts hier:
http://dev.mysql.com/tech-resources/articles/storage…
http://www.phpblogger.net/2007/03/17/myisam-oder-inn…

Viele Grüße
Marvin

gelöscht :
Schaue ich jetzt aber ins Filesystem, ist jobs ca.
6,2 MB groß, jobs2 aber gerade mal
lächerliche 34 KB!!!

Hallo Kalle,

da InnoDB -wie schon von Marvin erzählt- eine Transaktion unterstützende Engine ist: Hast Du vor oder nach dem Commit in das Filesystem geschaut?

MfG Georg V.

Each MyISAM table is stored on disk in three files. The files have names that begin with the table name and have an extension to indicate the file type. An .frm file stores the table format. The data file has an .MYD (MYData) extension. The index file has an .MYI (MYIndex) extension.

wenn also die MYI 8 MB sind dann liegt es wohl am

Größe des Sortierungspuffers 8,192 KiB

bei mir allerdings sind beide tabellen neu erstellt mit
CREATE DATABASE InnoAtIsamDB
CREATE TABLE myisam (i INT) ENGINE = MYISAM;
CREATE TABLE innodb (i INT) ENGINE = INNODB;

erzeugt bei mir

folgende files

db.opt 1KB

myisam.frm 9kb
myisma.MYD 0kb
myisam.MYI 1kb

innodb.frm 9kb

nun frag ich mich wie du auf deine werte kommst.

nun frag ich mich wie du auf deine werte kommst.

denn bei InnoDB

Data files must be able to hold your data and indexes

innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend

sind deine Daten also ganz woanders nochmal abgelegt :smile:

heisst bei mir ibdata1

und dann noch die beiden logs für transaktionen etc.

ibdata reserviert dann scheibchen für scheibchen je nach bedarf.