Jemand hat mir gerade gesagt, dass InnoDB viel besser ist als MyISAM. Also, wenn ich eine Tabelle erstellen, sollte ich immer versuchen, InnoDB Engine anstelle von MyISAM zu verwenden? Oder haben beide Vorteile?Soll ich immer MySQL InnoDB gegenüber MyISAM bevorzugen?
Antwort
MyISAM
ist transaktionslos und Heap-organisiert. Die Datensätze werden durch den Zeilenoffset in der Tabelle identifiziert, und die Indizes speichern diesen Offset als Zeilenzeiger.
InnoDB
unterstützt Transaktionen und ist index-organisiert. Die Datensätze werden durch den Wert PRIMARY KEY
identifiziert (oder eine versteckte interne Spalte ist PRIMARY KEY
definiert) und in einem B-Tree
gespeichert. Die sekundären Indizes speichern den Wert des PRIMARY KEY
als Zeilenzeiger.
Abfragen, die vollständige Tabellensuchen oder sekundäre Indexsuchen umfassen, sind normalerweise schneller unter MyISAM
Tabellen.
Abfragen, die PRIMARY KEY
Suchvorgänge umfassen, sind normalerweise schneller auf InnoDB
Tabellen.
MyISAM
Tabellen speichern die Anzahl der Datensätze in der Tabelle in den Metadaten der Tabelle, das ist, warum die Abfragen wie folgt:
SELECT COUNT(*)
FROM myisamtable
Augenblick sind.
MyISAM
Tabellen sind vollständig auf die DML
Operationen gesperrt (mit einigen Ausnahmen).
InnoDB
Tabellen sperren einzelne Datensätze und Indexlücken, jedoch sind dies die Datensätze und die Lücken, die gescannt werden, nicht nur diejenigen, die durch die WHERE
Bedingung übereinstimmen. Dies kann dazu führen, dass die Datensätze gesperrt werden, obwohl sie nicht übereinstimmen.
InnoDB
Tabellen unterstützen referentielle Integrität (FOREIGN KEY
s). MyISAM
Tabellen nicht.
Es gibt mehrere Szenarien, die Vorteile beider Engines zeigen können.
Um es einfach auszudrücken:
- wenn Sie
- , wenn Sie Fremdschlüssel benötigen
sollten Sie verwenden MyISAM müssen Transaktionsunterstützung:
Sie InnoDB verwenden sollten
- wenn Sie brauchen nicht auf die oben UND
- Sie benötigen Geschwindigkeit (schneller Datenbankoperationen)
Sie können dies lesen http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ über Geschwindigkeit. –
IMHO Sie immer InnoDB
über MyISAM
wegen der Transaktionsunterstützung bevorzugen sollte, die im Herzen jedes relationales Datenbanksystem ist.
InnoDB ist eine vollständig ACID-kompatible Datenbank-Engine und bietet daher Unterstützung für Transaktionen usw. Daher kann es langsamer als die MyISAM-Datenbank sein, die dazu neigt, in eine andere Richtung optimiert zu werden.
Daher, wenn Sie Transaktionen benötigen InnoDB (oder ein anderes RDBMS wie PostgreSQL) ist die offensichtliche Wahl.
Es gibt einen sinnvollen Vergleich über auf Wikipedia
Sie beide nutzen könnten. Sie könnten InnoDB für Ihre Schreibdatenbank/Transaktionen verwenden, aber von einer MyISAM-Datenbank, die denormalisiert ist, zurücklesen. Dies gibt das Beste aus beiden Welten. Sie wissen, dass Ihre Daten mit referenzieller Integrität von InnoDB sicher sind, und Sie können es so schnell lesen, wie Sie mit MyISAM möchten.
Können Sie bitte auf einen Link zur Verwendung beider Engines verweisen – Amareswar
Einfache Antwort: Nein, sollten Sie nicht.
Ein paar Punkte über jeden Motor:
InnoDB
- Volle Unterstützung für Fremdschlüsselbeschränkungen und Transaktionen. (ACID-konform)
- Sperren auf Zeilenebene.
- Deutlich schnellere INSERT-Anweisungen. (und möglicherweise auch AKTUALISIEREN)
MyISAM
- Faster SELECT-Anweisungen.
- Unterstützung für die Volltextsuche
- BLOB und TEXT-Spalten
- 4x max Speichergrenze, im Vergleich zu InnoDB (256 TB vs 64TB)
mehr Siehe im Handbuch indiziert werden können:
http://www.mikenbernat.com/blog/MySQL_-_InnoDB_vs_MyISAM –
Nein; beide haben ihre Vorteile. – philfreo