Mysql
 sql >> Datenbank >  >> RDS >> Mysql

InnoDB oder MyISAM - Warum nicht beides?

Sie können sowohl MyISAM- als auch InnoDB-Tabellen in derselben Datenbank haben. Was Sie jedoch feststellen werden, ist, dass MyISAM bei sehr großen Tabellen Probleme mit Tabellensperren verursachen würde. Letztendlich wird dadurch die gesamte Tabelle für eine einzige Transaktion gesperrt, was sehr schlecht ist, wenn Sie viele Benutzer haben, die Ihre Website verwenden. Beispiel:Wenn ein Benutzer auf Ihrer Website nach etwas sucht und die Abfrage Minuten dauert, können andere Benutzer Ihre Website während dieser Zeit nicht verwenden, da die gesamte Tabelle gesperrt ist.

InnoDB hingegen verwendet Sperren auf Zeilenebene, was bedeutet, dass diese Zeile die einzige Zeile ist, die während einer Transaktion von 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 man es mit dem Sperren auf Tabellenebene von MyISAM vergleicht. Wenn Sie InnoDB verwenden, können Sie wie viele große Websites eine serverseitige Suchmaschine wie Sphinx verwenden für die Volltextsuche. Oder Sie könnten sogar eine MyISAM-Tabelle verwenden, um die Suche wie f00 durchzuführen empfohlen. Ich persönlich habe InnoDB hauptsächlich wegen der Sperrfunktion auf Zeilenebene empfohlen, aber auch, weil Sie die Volltextsuche auf viele andere Arten implementieren können.

Wenn Sie eine Message-Board-Anwendung mit vielen Auswahlen, Einfügungen und Aktualisierungen haben, ist InnoDB wahrscheinlich die allgemein geeignete Wahl. Aber wenn Sie so etwas (oder etwas anderes mit registrierten Benutzern) nicht bauen und Ihre Arbeit meistens mit statischem Inhalt (oder mehr Lese- als Schreibvorgängen), dann könnten Sie MyISAM verwenden.