Lassen Sie uns über den Unterschied zwischen MyISAM und InnoDB sprechen

Lassen Sie uns über den Unterschied zwischen MyISAM und InnoDB sprechen

Die Hauptunterschiede sind folgende:

1. MySQL verwendet standardmäßig MyISAM.

2. MyISAM unterstützt keine Transaktionen, InnoDB jedoch schon. InnoDBs AUTOCOMMIT ist standardmäßig aktiviert, d. h. jede SQL-Anweisung wird standardmäßig in eine Transaktion gekapselt und automatisch festgeschrieben. Dies wirkt sich auf die Geschwindigkeit aus. Daher ist es am besten, mehrere SQL-Anweisungen zwischen Begin und Commit einzufügen, um eine Transaktion zur Übermittlung zu bilden.

3. InnoDB unterstützt das Sperren von Datenzeilen, während MyISAM das Sperren von Zeilen nicht unterstützt und nur das Sperren der gesamten Tabelle unterstützt. Das heißt, die Lesesperre und die Schreibsperre für dieselbe Tabelle von MyISAM schließen sich gegenseitig aus. Wenn MyISAM gleichzeitig liest und schreibt und sich sowohl Lese- als auch Schreibanforderungen in der Warteschlange befinden, hat die Standardschreibanforderung eine höhere Priorität, selbst wenn die Leseanforderung zuerst eintrifft. Daher ist MyISAM nicht für Situationen geeignet, in denen eine große Anzahl von Abfragen und Änderungen gleichzeitig vorhanden ist, da der Abfrageprozess für lange Zeit blockiert wird. Da MyISAM die Tabelle sperrt, kann ein zeitaufwändiger Lesevorgang andere Schreibprozesse behindern.

4. InnoDB unterstützt Fremdschlüssel, MyISAM jedoch nicht.

5. Der Primärschlüsselbereich von InnoDB ist größer, bis zu doppelt so groß wie der von MyISAM.

6. InnoDB unterstützt keine Volltextindizierung, MyISAM jedoch schon. Volltextindizierung bedeutet, dass für jedes Wort (außer Stoppwörtern) in char, varchar und text ein invertierter Index erstellt wird. Der Volltextindex von MyISAM ist eigentlich nutzlos, da er die chinesische Wortsegmentierung nicht unterstützt. Der Benutzer muss nach der Wortsegmentierung Leerzeichen hinzufügen und diese dann in die Datentabelle schreiben. Darüber hinaus werden Wörter mit weniger als 4 chinesischen Zeichen wie Stoppwörter ignoriert.

7. MyISAM unterstützt GIS-Daten, InnoDB jedoch nicht. Das heißt, MyISAM unterstützt die folgenden räumlichen Datenobjekte: Punkt, Linie, Polygon, Oberfläche usw.

8. Count(*) ohne where ist mit MyISAM viel schneller als mit InnoDB. Da MyISAM über einen integrierten Zähler verfügt, liest es bei count(*) direkt aus dem Zähler, während InnoDB die gesamte Tabelle scannen muss.

Daher wird count(*) bei der Ausführung in InnoDB normalerweise von einer Where-Klausel begleitet, und die Where-Klausel muss andere Indexspalten als den Primärschlüssel enthalten.

Warum wird hier „außerhalb des Primärschlüssels“ betont? Denn in InnoDB wird der Primärindex zusammen mit den Rohdaten gespeichert, während der Sekundärindex separat gespeichert wird und es einen Zeiger gibt, der auf den Primärschlüssel zeigt.

Wenn Sie daher nur zählen (*), ist es schneller, den Sekundärindex zum Scannen zu verwenden, während der Primärschlüssel hauptsächlich dann nützlich ist, wenn der Index gescannt und gleichzeitig Rohdaten zurückgegeben werden.

Zusatzwissen: Was bedeutet ENGINE=InnoDB und AUTO_INCREMENT in MySQL?

Wie unten dargestellt:

Tabelle „hui_user“ erstellen (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Benutzertabellen-ID',
 `Benutzername` varchar(50) NOT NULL COMMENT 'Benutzername',
 `password` varchar(50) NOT NULL COMMENT 'Benutzerpasswort, MD5 verschlüsselt',
 `E-Mail` varchar(50) DEFAULT NULL,
 `Telefon` varchar(20) DEFAULT NULL,
 `question` varchar(100) DEFAULT NULL COMMENT 'Frage zur Passwortwiederherstellung',
 `answer` varchar(100) DEFAULT NULL COMMENT 'Antwort zum Abrufen des Passworts',
 `role` int(4) NOT NULL COMMENT 'Rolle 0-Administrator, 1-Normaler Benutzer',
 `create_time` datetime NICHT NULL KOMMENTAR 'Erstellungszeit',
 `update_time` datetime NICHT NULL KOMMENTAR 'Letzte Aktualisierungszeit',
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `user_name_unique` (`username`) MIT BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

In dieser SQL-Anweisung gibt es eine solche

ENGINE=InnoDB AUTO_INCREMENT=22 STANDARD-CHARSET=utf8;

Wofür die letzten drei Punkte sind, verstehe ich allerdings nicht ganz?

1. Ist ENGINE=InnoDB nicht die Standard-Engine?

2. AUTO_INCREMENT=22, ist das nicht eine automatische Inkrementierung? Warum Zahlen festlegen?

3. Ist utf8 nicht bereits in my.ini eingestellt?

Ist ENGINE=InnoDB nicht die Standard-Engine?

——Ja, wenn Sie es nicht schreiben, ist es in Ordnung und der Standard wird verwendet. Ich schreibe es hier, weil Sie deutlich sehen können, was in dieser Anweisung zur Tabellenerstellung verwendet wird, und es ist auch eine gute Angewohnheit, es beim Erstellen einer Tabelle zu schreiben.

AUTO_INCREMENT=22, ist das nicht eine automatische Inkrementierung? Warum Zahlen festlegen?

——Dies ist automatisch inkrementell. Wenn Sie hier eine Zahl festlegen, bedeutet dies, dass diese Anweisung automatisch von 22 an inkrementiert werden soll, wenn sie wächst.

Ist utf8 nicht bereits in my.ini eingestellt?

——Obwohl dies in my.ini festgelegt wurde, legt es die Sprachkodierung von MySQL fest. Wenn es beim Erstellen hier nicht festgelegt wird, werden verstümmelte Zeichen angezeigt. Die Bereiche der beiden sind unterschiedlich. Beim Erstellen eines Formulars wird dieser Zeichensatz auf diese Tabelle angewendet. Es stellt den Zeichensatz der MySQL-Lebenslaufdatenbank-Datentabelle dar, der auf utf-8 festgelegt ist

Der obige Artikel über den Unterschied zwischen MyISAM und InnoDB ist der gesamte Inhalt, den der Herausgeber mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen.

Das könnte Sie auch interessieren:
  • Implementierungsprinzip der MySQL MyISAM-Standardspeicher-Engine
  • Beschreiben Sie kurz die MySQL InnoDB-Speicher-Engine
  • Zusammenfassung der Unterschiede zwischen den MySQL-Speicher-Engines MyISAM und InnoDB

<<:  So deinstallieren und installieren Sie Tomcat neu (mit Bildern und Text)

>>:  js, um einen Ein- und Ausblendeffekt des Bildes zu erzielen

Artikel empfehlen

Analyse der Nutzung des Xmeter API-Schnittstellentesttools

XMeter API bietet einen umfassenden Online-Schnit...

Tutorial zur Verwendung von Webpack in JavaScript

Inhaltsverzeichnis 0. Was ist Webpack 1. Einsatz ...

Einfache Verwendung von temporären MySQL-Tabellen

Temporäre MySQL-Tabellen sind sehr nützlich, wenn...

So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

Manchmal müssen wir einige Befehle auf einem Remo...

W3C Tutorial (6): W3C CSS Aktivitäten

Ein Stylesheet beschreibt, wie ein Dokument angez...

Mehrere Methoden zur Implementierung von Karussellbildern in JS

Karussell Die Grundidee ist: Im großen Container ...

Tutorial zur Installation und Verwendung des Elasticsearch-Tools cerebro

Cerebro ist eine Weiterentwicklung des Elasticsea...

Die CSS-Priorität der Webseite wird für Sie ausführlich erklärt

Bevor wir über die CSS-Priorität sprechen, müssen...

So verhindern Sie das Flashen von Vue in kleinen Projekten

Zusammenfassung HTML: Element plus V-Umhang CSS: ...

Vue verwendet Echarts, um ein dreidimensionales Balkendiagramm zu implementieren

In diesem Artikel wird der spezifische Code von V...

Tutorial zur Installation und Konfiguration der Centos7-MySQL-Datenbank

1. Systemumgebung Die Systemversion nach dem Yum-...

Wann sollte eine Website Anzeigen schalten?

Als ich vor kurzem mit einem Internet-Veteranen ü...