Heim  >  Artikel  >  MySQL ist ein Muss für die PHP-Entwicklung. Kennen Sie den Unterschied zwischen MyISAM und InnoDB in MySQL?

MySQL ist ein Muss für die PHP-Entwicklung. Kennen Sie den Unterschied zwischen MyISAM und InnoDB in MySQL?

PHP中文网
PHP中文网Original
2018-04-09 17:07:462134Durchsuche

Unterschiede in der Zusammensetzung:

Jedes MyISAM wird als drei Dateien auf der Festplatte gespeichert. Der Name der ersten Datei beginnt mit dem Namen der Tabelle und die Erweiterung gibt den Dateityp an. In der Datei

.frm werden Tabellendefinitionen gespeichert.

Die Erweiterung der Datendatei ist .MYD (MYData).

Die Erweiterung der Indexdatei ist .MYI (MYIndex).

Festplattenbasierte Ressourcen sind die InnoDB-Tabellenbereichsdatendatei und ihre Protokolldatei. Die Größe der InnoDB-Tabelle ist nur durch die Größe der Betriebssystemdatei begrenzt, im Allgemeinen 2 GB
Transaktionsverarbeitung:

Die MyISAM-Typtabelle legt Wert auf Leistung und ihre Ausführungszeiten sind schneller als die des InnoDB-Typs, bietet jedoch keine Transaktionsunterstützung

InnoDB bietet Transaktionsunterstützung, Fremdschlüssel und andere erweiterte Datenbankfunktionen

SELECT UPDATE, INSERT, Löschvorgänge
Wenn Sie eine große Anzahl von SELECTs ausführen, ist MyISAM die bessere Wahl

1 Wenn Ihre Daten aus Leistungsgründen eine große Anzahl von INSERT- oder UPDATE-Vorgängen durchführen, Sie sollten Folgendes tun: Bei Verwendung der InnoDB-Tabelle

2. Aus der Tabelle löschen, erstellt InnoDB die Tabelle nicht neu, sondern löscht sie Zeile für Zeile.

3.LOAD TABLE FROM MASTER funktioniert nicht für InnoDB. Die Lösung besteht darin, zuerst die InnoDB-Tabelle in eine MyISAM-Tabelle zu ändern, die Daten zu importieren und sie dann in eine InnoDB-Tabelle zu ändern, aber für die zusätzliche InnoDB Verwendete Funktionen (z. B. Fremdschlüssel) Tabellen sind nicht anwendbar

Operationen auf AUTO_INCREMENT

Interne Verarbeitung einer AUTO_INCREMEN-Spalte pro Tabelle.

MyISAM aktualisiert diese Spalte automatisch für INSERT- und UPDATE-Vorgänge. Dadurch werden AUTO_INCREMENT-Spalten schneller (mindestens 10 %). Nachdem der Wert am Anfang der Sequenz gelöscht wurde, kann er nicht mehr verwendet werden. (Wenn die Spalte AUTO_INCREMENT als letzte Spalte eines mehrspaltigen Index definiert ist, ist es möglich, am Anfang der Sequenz entfernte Werte wiederzuverwenden.)

Der AUTO_INCREMENT-Wert kann mit ALTER TABLE oder myisamch zurückgesetzt werden.

Für Felder vom Typ AUTO_INCREMENT muss InnoDB einen Index nur mit diesem Feld enthalten, aber in der MyISAM-Tabelle kann er mit anderen eingerichtet werden Felder Union-Indizes

Bessere und schnellere Handhabung von Auto_Inkrementen

Wenn Sie eine AUTO_INCREMENT-Spalte für eine Tabelle angeben, enthält das InnoDB-Tabellenhandle im Datenwörterbuch einen Zähler namens Autoinkrement-Zähler, der zum Zuweisen verwendet wird einen neuen Wert für die Spalte.

Der Auto-Inkrement-Zähler wird nur im Hauptspeicher und nicht auf der Festplatte gespeichert.

Informationen zur Algorithmusimplementierung dieses Rechners finden Sie unter

Verwendung der Spalte AUTO_INCREMENT in InnoDB Die spezifische Anzahl der Zeilen in der Arbeitstabelle

Wählen Sie count(*) aus der Tabelle aus. MyISAM liest einfach die Anzahl der gespeicherten Zeilen. Beachten Sie, dass die Operationen ausgeführt werden, wenn die count(*)-Anweisung die Where-Bedingung enthält der beiden Tabellen sind gleich

InnoDB speichert nicht die spezifische Anzahl von Zeilen in der Tabelle, das heißt, wenn InnoDB „select count(*) from table“ ausführt, muss es die gesamte Tabelle scannen, um es zu berechnen Wie viele Zeilen gibt es?

Sperre

Tabellensperre

sorgt für Zeilensperrung (Sperrung auf Zeilenebene) und bietet zusätzlich nicht sperrendes Einlesen

SELECTs im Einklang mit dem Oracle-Typ , ist die Zeilensperre der InnoDB-Tabelle nicht absolut, wenn MySQL beim Ausführen einer SQL-Anweisung den zu scannenden Bereich nicht bestimmen kann, sperrt die InnoDB-Tabelle auch die gesamte Tabelle, z. B. update table set num=1, wobei der Name „ %aaa%“


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn