2011-01-02 18 views
5

Ich habe verschiedene Threads gelesen, zwischen denen besser ist zwischen InnoDB und MyISAM. Es scheint, dass die Debatten zu verwenden sind oder die anderen. Ist es nicht möglich, beides zu verwenden, abhängig von der Tabelle?InnoDB oder MyISAM - Warum nicht beides?

Was wären die Nachteile dabei? Soweit ich das beurteilen kann, kann der Motor während des CREATE TABLE Befehls eingestellt werden. Daher können bestimmte Tabellen, die oft gelesen werden, auf MyISAM gesetzt werden, aber Tabellen, die Transaktionsunterstützung benötigen, können InnoDB verwenden.

+1

was ist ein Cluster-Primärschlüsselindex? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html Warum sind geclusterte Primärschlüsselindizes besser als normale btree-Indizes? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a-/4421601#4421601 –

Antwort

13

Sie können sowohl MyISAM- als auch InnoDB-Tabellen in derselben Datenbank haben. Was Sie jedoch feststellen werden, wenn MyISAM sehr große Tabellen hat, würde dies zu Problemen mit der Tabellensperre führen. Letztendlich sperrt es die gesamte Tabelle für eine einzelne Transaktion, was sehr schlimm ist, wenn viele Benutzer Ihre Website verwenden. Wenn Sie z. B. einen Nutzer auf Ihrer Website nach etwas suchen lassen und die Abfrage in wenigen Minuten abgeschlossen ist, können keine anderen Nutzer Ihre Website in diesem Zeitraum verwenden, da die gesamte Tabelle gesperrt ist.

InnoDB verwendet andererseits das Sperren auf Zeilenebene, dh diese Zeile ist die einzige Zeile, die während einer Transaktion aus der Tabelle gesperrt wird. InnoDB kann bei Suchvorgängen langsamer sein, da es keine Volltextsuche wie MyISAM bietet, aber das ist kein großes Problem, wenn Sie es mit dem Sperren von MyISAM auf Tabellenebene vergleichen. Wenn Sie InnoDB wie viele große Websites verwenden, können Sie eine serverseitige Suchmaschine wie Sphinx für Volltextsuchen verwenden. Oder Sie könnten sogar eine MyISAM-Tabelle verwenden, um die Suche wie f00 vorgeschlagen zu machen. Ich habe InnoDB persönlich vor allem wegen der Sperrfunktion auf Zeilenebene empfohlen, aber auch, weil Sie die Volltextsuche auf viele andere Arten implementieren können.

Grundsätzlich, wenn Sie eine Message Board-Anwendung mit vielen Selects, Einfügungen sowie Updates haben, ist InnoDB wahrscheinlich die allgemein richtige Wahl. Aber wenn Sie nicht so etwas (oder etwas anderes mit registrierten Benutzern) erstellen und hauptsächlich mit statischem Inhalt (oder mehr Lesevorgängen als Schreibvorgängen) arbeiten, können Sie MyISAM verwenden.

+4

Wenn Sie Volltextsuche benötigen, erstellen Sie einfach eine Myisam-Tabelle und Verwenden Sie es, um wieder in Ihre schön gruppierten innodb-Daten zu indizieren - einfach. –

+0

Ja, das ist auch eine sehr gute Option. –

+0

Danke, tolle Antwort.Nach meiner Anwendung zu urteilen, sieht es nach InnoDB am besten aus. – Skoder

3

Ja, Sie können beide in der gleichen Datenbank verwenden, Sie können für jede Tabelle separat wählen.

0

Sie wählen InnoDB oder MyISAM nicht auf Datenbankebene, sondern auf Tabellenebene. Innerhalb der einen Datenbank könnten Sie also einige Tabellen haben, auf denen die InnoDB-Engine läuft und einige, die MyISAM ausführen. Wie Sie bereits erwähnt haben, könnten Sie InnoDB für die Tabellen, die Transaktionen benötigen, und MyISAM verwenden, wo Sie andere Funktionen wie die Volltextsuche benötigen.

1

Kurz gesagt, InnoDB ist gut, wenn Sie an etwas arbeiten, das eine zuverlässige Datenbank benötigt, die viele INSERT- und UPDATE-Anweisungen verarbeiten kann.

und, MyISAM ist gut, wenn Sie eine Datenbank benötigen, die meistens viel lesen (SELECT) Anweisungen statt Schreiben (INSERT und UPDATES) unter Berücksichtigung ihres Nachteils bei der Tabellenverriegelung nehmen wird.

möchten Sie vielleicht auschecken;
Pros and Cons of InnoDB
Pros and Cons of MyISAM

Verwandte Themen