2009-12-28 9 views
19

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?

+0

http://www.mikenbernat.com/blog/MySQL_-_InnoDB_vs_MyISAM –

+1

Nein; beide haben ihre Vorteile. – philfreo

Antwort

36

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.

8

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)
+6

Sie können dies lesen http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ über Geschwindigkeit. –

5

IMHO Sie immer InnoDB über MyISAM wegen der Transaktionsunterstützung bevorzugen sollte, die im Herzen jedes relationales Datenbanksystem ist.

1

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

0

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.

+0

Können Sie bitte auf einen Link zur Verwendung beider Engines verweisen – Amareswar

11

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: