Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in die MySQL-Speicher-Engine

Detaillierte Einführung in die MySQL-Speicher-Engine

零下一度
零下一度Original
2017-07-20 21:02:101252Durchsuche

Was ist eine Speicher-Engine?

Eine relationale Datenbanktabelle ist eine Datenstruktur, die zum Speichern und Organisieren von Informationen verwendet wird. Eine Tabelle kann als eine Tabelle verstanden werden, die aus Zeilen und Spalten besteht, ähnlich der Form einer Excel-Tabelle. Einige Tabellen sind einfach, andere komplex, einige Tabellen werden überhaupt nicht zum Speichern von Langzeitdaten verwendet, und einige Tabellen sind sehr schnell zu lesen, aber beim Einfügen von Daten in den eigentlichen Entwicklungsprozess sind wir möglicherweise sehr schlecht Tabellen, unterschiedliche Tabellen, bedeuten, dass unterschiedliche Arten von Daten gespeichert werden und es Unterschiede in der Datenverarbeitung gibt. Für MySQL stehen viele Arten von Speicher-Engines zur Verfügung. Wir können entsprechend unseren Datenverarbeitungsanforderungen verschiedene Speicher-Engines auswählen, um die leistungsstarken Funktionen von MySQL optimal zu nutzen. In diesem Blogbeitrag werden die Eigenschaften jedes Motors und seine anwendbaren Situationen zusammengefasst und analysiert, ohne dass er sich auf tiefere Dinge einlässt. Meine Lernmethode besteht darin, zuerst zu lernen, wie man es benutzt, zu wissen, wie man es benutzt, und dann herauszufinden, wie man es benutzt. Im Folgenden finden Sie eine kurze Einführung in die von MySQL unterstützten Speicher-Engines.

Detaillierte Einführung in die MySQL-Speicher-Engine

MySQL 5.5 und höher verwendet standardmäßig die InnoDB-Speicher-Engine und stellt transaktionssichere Tabellen bereit, während andere Speicher-Engines nicht transaktionssichere Tabellen sind.

Um die Standard-Engine zu ändern, können Sie die Standard-Storage-Engine in der Konfigurationsdatei ändern. Sie können Folgendes verwenden: showvariableslike'default_storage_engine'; um die aktuelle Datenbank in der Standard-Engine anzuzeigen. Befehle: showengines und showvariableslike'have%' können die von der aktuellen Datenbank unterstützten Engines auflisten. Datensätze, in denen Value als deaktiviert angezeigt wird, weisen darauf hin, dass die Datenbank diese Engine unterstützt und beim Starten der Datenbank deaktiviert ist. Nach MySQL 5.1 gibt es eine ENGINES-Tabelle in der INFORMATION_SCHEMA-Datenbank. Die darin enthaltenen Informationen sind genau die gleichen wie in der showengines-Anweisung. Sie können die folgende Anweisung verwenden, um abzufragen, welche Speicher-Engines die Transaktionsverarbeitung unterstützen: selectenginefrominformation_chema.engineswheretransactions='yes'. ;

Mit dem Schlüsselwort engine können Sie die Engine angeben, die beim Erstellen oder Ändern der Datenbank verwendet wird.

Hauptspeicher-Engines: MyISAM, InnoDB, MEMORY und MERGE Einführung:

Geben Sie beim Erstellen einer Tabelle die zu verwendende Engine über engine=... oder type=.... an. showtablestatusfromDBname, um der Engine die angegebene Tabelle anzuzeigen.

 (1) MyISAM

Es unterstützt keine Transaktionen oder Fremdschlüssel, insbesondere Anwendungen mit hoher Zugriffsgeschwindigkeit, keine Anforderungen an die Transaktionsintegrität oder hauptsächlich SELECT- und INSERT-Anwendungen können damit erstellt werden Motor.

Jedes MyISAM wird als 3 Dateien auf der Festplatte gespeichert. Der Dateiname und der Tabellenname sind gleich, aber die Erweiterungen sind:

.frm (Speichertabellendefinition)

MYD (MYData, Speicherdaten)

MYI (MYIndex, Speicherindex)

Datendateien und Indexdateien können in verschiedenen Verzeichnissen abgelegt werden, um E/A gleichmäßig zu verteilen und schnellere Geschwindigkeiten zu erzielen. Um den Pfad der Datendatei und der Indexdatei anzugeben, müssen Sie ihn beim Erstellen der Tabelle über die Anweisungen DATADIRECTORY und INDEXDIRECTORY angeben. Der Dateipfad muss einen absoluten Pfad verwenden.

Jede MyISAM-Tabelle verfügt über ein Flag, das vom Server oder dem myisamchk-Programm beim Überprüfen der MyISAM-Datentabelle gesetzt wird. Die MyISAM-Tabelle verfügt außerdem über ein Flag, das anzeigt, ob die Datentabelle nach der letzten Verwendung normal geschlossen wurde. Wenn der Server heruntergefahren oder abgestürzt ist, kann dieses Flag verwendet werden, um festzustellen, ob die Datentabelle überprüft und repariert werden muss. Wenn Sie möchten, dass diese Prüfung automatisch erfolgt, können Sie beim Starten des Servers das Phänomen --myisam-recover verwenden. Dies führt dazu, dass der Server jedes Mal, wenn er eine MyISAM-Datentabelle öffnet, automatisch die Flags der Tabelle überprüft und notwendige Reparaturen durchführt. Tabellen vom Typ MyISAM können beschädigt sein. Mit der CHECKTABLE-Anweisung können Sie den Zustand der MyISAM-Tabelle überprüfen und mit der REPAIRTABLE-Anweisung eine beschädigte MyISAM-Tabelle reparieren.

MyISAM-Tabellen unterstützen außerdem drei verschiedene Speicherformate:

Statische Tabelle (feste Länge)

Dynamische Tabelle

Komprimierte Tabelle

 Statisch Tabelle ist das Standardspeicherformat. Die Felder in statischen Tabellen sind alle Felder mit nicht variabler Länge, sodass jeder Datensatz eine feste Länge hat. Die Vorteile dieser Speichermethode bestehen darin, dass sie sehr schnell gespeichert werden kann und sich nach Fehlern leicht wiederherstellen lässt ist, dass es normalerweise mehr Platz einnimmt als eine dynamische Tabelle. Statische Tabellen füllen beim Speichern von Daten Leerzeichen entsprechend der Breitendefinition der Spaltendefinitionen aus, diese Leerzeichen werden jedoch beim Zugriff nicht abgerufen. Diese Leerzeichen wurden entfernt, bevor sie an die Anwendung zurückgegeben wurden. Bitte beachten Sie gleichzeitig: In manchen Fällen kann es erforderlich sein, Leerzeichen nach dem Feld zurückzugeben. Bei Verwendung dieses Formats werden nachfolgende Leerzeichen automatisch verarbeitet.

Dynamische Tabellen enthalten Felder variabler Länge und Datensätze haben keine feste Länge. Der Vorteil eines solchen Speichers besteht darin, dass er weniger Platz beansprucht. Häufige Aktualisierungen und Löschungen von Datensätzen führen jedoch zu Fragmentierung Führen Sie regelmäßig die OPTIMIZETABLE-Anweisung oder den Befehl myisamchk-r aus. Verbessert die Leistung und erschwert die Wiederherstellung nach Fehlern relativ.

Die komprimierte Tabelle wird vom Tool myisamchk erstellt und nimmt nur sehr wenig Platz ein. Da jeder Datensatz einzeln komprimiert wird, entsteht nur ein sehr geringer Zugriffsaufwand.

 (2) InnoDB

InnoDB ist eine robuste Transaktionsspeicher-Engine, die von vielen Internetunternehmen verwendet wird und Benutzern ein leistungsstarkes Tool für den Betrieb sehr großer Datenspeicher bietet. Auf meinem Computer ist MySQL Version 5.6.13 installiert und InnoDB ist die Standardspeicher-Engine. InnoDB führt auch Sperren auf Zeilenebene und Fremdschlüsseleinschränkungen ein. In den folgenden Situationen ist die Verwendung von InnoDB die idealste Wahl:

 1. Aktualisieren Sie intensive Tabellen. Die InnoDB-Speicher-Engine eignet sich besonders für die Verarbeitung mehrerer gleichzeitiger Update-Anfragen.

 2. Angelegenheiten. Die InnoDB-Speicher-Engine ist eine Standard-MySQL-Speicher-Engine, die Transaktionen unterstützt.

 3. Automatische Notfallwiederherstellung. Im Gegensatz zu anderen Speicher-Engines können InnoDB-Tabellen nach einem Notfall automatisch wiederhergestellt werden.

4. Fremdschlüsseleinschränkungen. Die einzige Speicher-Engine, die Fremdschlüssel in MySQL unterstützt, ist InnoDB.

5. Unterstützt das automatische Hinzufügen des Spaltenattributs AUTO_INCREMENT.

Die InnoDB-Speicher-Engine bietet Transaktionssicherheit mit Commit-, Rollback- und Crash-Recovery-Funktionen. Im Vergleich zur Speicher-Engine von MyISAM ist die Schreibverarbeitungseffizienz von InnoDB jedoch weniger effizient und benötigt mehr Speicherplatz für die Aufbewahrung von Daten und Indizes.

1) Spalte für automatisches Wachstum:

Die Spalte für automatisches Wachstum der InnoDB-Tabelle kann manuell eingefügt werden. Wenn der eingefügte Wert jedoch leer oder 0 ist, ist der tatsächlich eingefügte Wert der Wert nach automatischem Wachstum. Der Startwert des automatischen Wachstumswerts kann durch die Anweisung „ALTERTABLE...AUTO_INCREMENT=n;“ erzwungen werden. Der Standardwert ist 1, aber der erzwungene Standardwert wird im Speicher gespeichert und geht nach dem Neustart der Datenbank verloren . Sie können LAST_INSERT_ID() verwenden, um den Wert abzufragen, den der aktuelle Thread zum letzten Mal zum Einfügen des Datensatzes verwendet hat. Wenn mehrere Datensätze gleichzeitig eingefügt werden, wird der vom ersten Datensatz verwendete automatische Inkrementwert zurückgegeben.

Für InnoDB-Tabellen muss die Spalte für die automatische Vergrößerung ein Index sein. Wenn es sich um einen zusammengesetzten Index handelt, muss es sich auch um die erste Spalte des zusammengesetzten Index handeln. Bei MyISAM-Tabellen kann die automatische Wachstumsspalte jedoch auch andere Spalten des zusammengesetzten Index sein Die Wachstumsspalte wird entsprechend dem Kombinationsindex zu den vorherigen Spalten von erhöht.

2) Fremdschlüsseleinschränkungen:

Die einzige Speicher-Engine, die Fremdschlüssel in MySQL unterstützt, ist InnoDB. Beim Erstellen eines Fremdschlüssels muss die übergeordnete Tabelle einen entsprechenden Index haben und die untergeordnete Tabelle Beim Erstellen des Fremdschlüssels muss ein entsprechender Index vorhanden sein. Entsprechende Indizes werden ebenfalls automatisch erstellt.

Beim Erstellen eines Index können Sie beim Löschen oder Aktualisieren der übergeordneten Tabelle die entsprechenden Vorgänge für die untergeordnete Tabelle angeben, einschließlich „Restrict“, „Cascade“, „SetNull“ und „NoAction“. Unter diesen sind „restrict“ und „noaction“ gleich, was bedeutet, dass die übergeordnete Tabelle nicht aktualisiert werden kann, wenn die untergeordnete Tabelle verknüpft ist. Wenn die übergeordnete Tabelle aktualisiert oder gelöscht wird, werden die der untergeordneten Tabelle entsprechenden Datensätze aktualisiert oder gelöscht. setnull bedeutet, dass die übergeordnete Tabelle aktualisiert oder gelöscht wird. Beim Löschen wird das entsprechende Feld der untergeordneten Tabelle gesetzt.

Wenn auf eine Tabelle durch einen von einer anderen Tabelle erstellten Fremdschlüssel verwiesen wird, darf der entsprechende Index oder Primärschlüssel der Tabelle nicht gelöscht werden.

Sie können setforeign_key_checks=0; verwenden, um Fremdschlüsseleinschränkungen vorübergehend zu deaktivieren, und setforeign_key_checks=1, um Einschränkungen zu aktivieren.

(二)InnoDB

 (3) SPEICHER

Der Speicher verwendet die im Speicher gespeicherten Inhalte, um Tabellen zu erstellen. Jede MEMORY-Tabelle entspricht tatsächlich einer Festplattendatei, das Format ist .frm. Der Tabellenzugriff vom Typ MEMORY ist sehr schnell, da die Daten im Speicher abgelegt werden und standardmäßig HASH-Indizes verwendet werden. Sobald der Server jedoch heruntergefahren wird, gehen die Daten in der Tabelle verloren, die Tabelle bleibt jedoch bestehen.

Standardmäßig verwendet die Speicherdatentabelle einen Hash-Index, um einen „Gleichheitsvergleich“ durchzuführen, aber der „Bereichsvergleich“ ist viel langsamer. Daher ist der Hash-Indexwert für die Verwendung in den Operatoren „=" und „" geeignet, jedoch nicht für die Verwendung in den Operatoren „“. Verwendung in der orderby-Klausel. Wenn Sie wirklich die Operatoren „“ verwenden möchten, können Sie einen Btree-Index verwenden, um die Arbeit zu beschleunigen.

Die in der MEMORY-Datentabelle gespeicherten Datenzeilen verwenden ein Format mit konstanter Länge und beschleunigen so die Verarbeitung. Dies bedeutet, dass Datentypen variabler Länge wie BLOB und TEXT nicht verwendet werden können. VARCHAR ist ein Typ mit variabler Länge, aber da er intern von MySQL als CHAR-Typ mit fester Länge behandelt wird, kann er verwendet werden.

Createtabletab_memoryengine=memoryselectid,name,age,addrfrommanorderbyid;

Verwenden Sie USINGHASH/BTREE, um den Index anzugeben.

Createindexmem_hashusinghashontab_memory(city_id);

Verwenden Sie beim Starten des MySQL-Dienstes die Option --init-file und fügen Sie Anweisungen wie insertinto...select oder loaddatainfile in diese Datei ein aus einer dauerhaften Datenquelle, wenn der Dienst startet.

Der Server benötigt genügend Speicher, um die gleichzeitig verwendete MEMORY-Tabelle zu verwalten. Wenn die MEMORY-Tabelle nicht mehr verwendet wird, sollten Sie DELETEFROM oder truncatetable oder ausführen, um den von der MEMORY-Tabelle belegten Speicher freizugeben Löschen Sie die gesamte Tabelle.

Die in jeder MEMORY-Tabelle platzierte Datenmenge wird durch die Systemvariable max_heap_table_size eingeschränkt. Der Anfangswert dieser Systemvariablen beträgt 16 MB. Gleichzeitig können Sie beim Erstellen einer MEMORY-Tabelle die MAX_ROWS-Klausel verwenden maximale Anzahl von Zeilen in der Tabelle.

Der Ausgangspunkt für die Verwendung der MySQL Memory-Speicher-Engine ist die Geschwindigkeit. Um die schnellste Reaktionszeit zu erreichen, wird als logisches Speichermedium der Systemspeicher verwendet. Obwohl das Speichern von Tabellendaten im Speicher eine hohe Leistung bietet, gehen bei einem Absturz des mysqld-Daemons alle Speicherdaten verloren. Mit der gewonnenen Geschwindigkeit gehen einige Nachteile einher. Es erfordert, dass die in der Speicherdatentabelle gespeicherten Daten ein Format mit konstanter Länge verwenden. Dies bedeutet, dass Datentypen mit variabler Länge wie BLOB und TEXT nicht verwendet werden können es als CHAR-Typ mit fester Länge, sodass es verwendet werden kann.

(4) MERGE

Die Merge-Speicher-Engine ist eine Kombination aus einer Reihe von MyISAM-Tabellen. Die Strukturen dieser MyISAM-Tabellen müssen genau gleich sein. Es gibt keine Daten in der MERGE-Tabelle Tabellen vom Typ , und MERGE können abgefragt, aktualisiert und gelöscht werden. Bei diesen Vorgängen handelt es sich tatsächlich um Vorgänge für die interne MyISAM-Tabelle. Für die Einfügeoperation in die MERGE-Tabelle wird die eingefügte Tabelle gemäß der INSERT_METHOD-Klausel definiert. Sie kann drei verschiedene Werte haben, sodass die Einfügeoperation entsprechend auf die erste oder letzte Tabelle wirkt oder setzen Sie es auf NEIN, um anzuzeigen, dass die MERGE-Tabelle nicht eingefügt werden kann. Sie können einen Löschvorgang für die MERGE-Tabelle durchführen. Dieser Vorgang löscht nur die Definition der MERGE-Tabelle und hat keine Auswirkungen auf die internen Tabellen. MERGE behält zwei Dateien, beginnend mit dem MERGE-Tabellennamen, auf der Festplatte: Die .frm-Datei speichert die Definition der Tabelle, die .MRG-Datei enthält Informationen über die kombinierte Tabelle, einschließlich der Tabellen, aus denen die MERGE-Tabelle besteht, und der Basis dafür Daten einfügen. Die MERGE-Tabelle kann durch Ändern der .MRG-Datei geändert werden, sie muss jedoch nach der Änderung über Flushtable aktualisiert werden.

createtableman_all(idint,namevarchar(20))engine=mergeunion=(man1,man2)insert_methos=last;

(三)MEMORY   

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die MySQL-Speicher-Engine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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