5.1 MyISAM 5.2 Innodb .2 Funktionen der Innodb-Speicher-Engine
5.2.3 Innodb-Statusprüfung
5.2.4 Anwendbare Szenarien5.2.4 (Erweitert) Was ist eine Sperre
create table
erstellen Beim Sortieren, Gruppieren und anderen Vorgängen wird vom Abfrageoptimierer eine temporäre Tabelle erstellt. Parallelität und Sperrebene
MyISAM verwendet Sperren auf Tabellenebene, nicht auf Zeilenebene. Das bedeutet, dass Sie beim Ändern der Daten in der Tabelle die gesamte Tabelle sperren müssen, und auch gemeinsame Sperren gelten Beim Lesen von Tabellen zu allen Tabellen hinzugefügt. Hier können wir sehen, dass sich Lese- und Schreibvorgänge für Tabellen mit MyISAM als Engine gegenseitig ausschließen. Es ist ersichtlich, dass MyISAM bei gleichzeitigen Lese- und Schreibvorgängen nicht sehr gut ist. Wenn es sich nur um schreibgeschützte Vorgänge handelt, ist die Leistung im Hinblick auf die Parallelität nicht schlecht, da die gemeinsame Sperre die gemeinsame Sperre nicht blockiert.
Reparatur von Tabellenschäden MyISAM unterstützt die Überprüfung und Reparatur von MyISAM-Tabellen, die aufgrund eines unerwarteten Herunterfahrens beschädigt wurden. Bei der hier erwähnten Reparatur handelt es sich jedoch nicht um eine Datenwiederherstellung, da MyISAM keine Transaktionsspeicher-Engine ist und daher keine zugehörigen Protokolle für die Transaktionswiederherstellung benötigt Beachten Sie daher, dass die Wiederherstellung von MyISAM-Tabellen zu Datenverlust führen kann. Wir können die Tabelle über check table table name
überprüfen und die Tabelle über repair table table name
wiederherstellen.
Von MyISAM-Tabellen unterstützte Indextypen MyISAM unterstützt die Volltextindizierung und war die einzige offizielle Speicher-Engine, die vor MySQL5.7 die Volltextindizierung nativ unterstützte.
Wenn MyISAM eine große schreibgeschützte Tabelle darstellt, das heißt, nachdem die Tabelle erstellt und die Daten importiert wurden, werden keine Änderungen an der Tabelle vorgenommen, dann können wir die Tabelle komprimieren, um sie zu reduzieren Festplatten-E/A. Wir können den Befehl myisampack
verwenden, um die Tabelle zu komprimieren. Durch die Komprimierung wird die Tabelle unabhängig komprimiert, sodass beim Lesen einer Datenzeile nicht die gesamte Tabelle dekomprimiert werden muss.
create table
创建出来的表,是指在排序、分组等操作中,当数量超过一定的大小之后,有查询优化器建立的临时表。
MyISAM存储引擎是由MYD和MYI组成,MYD是数据文件的扩展名,MYI是索引文件的扩展名,这个存储引擎是将表存储在以这两个为扩展名的数据文件和索引文件中。
特性:
check table tablename
对表进行检查,通过repair table tablename
对表进行恢复。myisampack
Wenn Sie eine große Tabelle speichern, müssen Sie MAX_Rows und AVG_ROW_LENGTH ändern.
Schreibgeschützte Anwendungen (Berichte und dergleichen)
Innodb ist die Standardspeicher-Engine für MySQL 5.5 und spätere Versionen. Innodb ist eine Speicher-Engine für die Transaktionsspeicherung, was bedeutet, dass sie die Transaktionsverarbeitung unterstützt.
Innodb verfügt über ein eigenes Konzept des Tabellenbereichs, und die Daten werden im Tabellenbereich gespeichert, der durch den Parameter innodb_file_per_table
bestimmt wird. Wenn dieser Parameter ON
ist, ist ein System Für jede Innodb-Tabelle wird eine Datei mit der Erweiterung ibd
erstellt. Wenn dieser Parameter OFF
ist, werden die Daten im gemeinsamen Tabellenbereich des Systems gespeichert >ibdataX, X
stellt eine Zahl dar, die standardmäßig bei 1 beginnt. innodb_file_per_table
这个参数来决定的,如果这个参数为ON
,则会对每个Innodb表建立一个扩展名为ibd
的系统文件,如果这个参数为OFF
时,则会把数据存储到系统的共享表空间,也就是ibdataX
,X
代表的时一个数字,默认从1开始。
查看这个参数的命令为:show variables like 'innodb_file_per_table';
修改这个参数的命令为:set global innodb_file_per_table=off;
5.2.1 系统表空间和独立表空间要如何选择
比较:
系统表空间 | 独立表空间 |
---|---|
无法简单的收缩文件大小 | 可以通过optimize table 命令收缩系统文件 |
会产生IO瓶颈 | 可以同时向多个文件刷新数据 |
建议:
把原来存在于系统表空间中的表转移到独立表空间中的方法。
步骤:
5.2.2 Innodb存储引擎的特性
5.2.3 Innodb状态检查
可以使用以下命令对Innodb状态进行检查:show engine innodb status
Der Befehl zum Anzeigen dieses Parameters lautet:
zeige Variablen wie „innodb_file_per_table“;
Der Befehl zum Ändern dieses Parameters lautet: set global innodb_file_per_table=off;
5.2.1 So wählen Sie zwischen Systemtabellenbereich und unabhängigem Tabellenbereich. Vergleich:
Systemtabellenbereich. Unabhängiger Tabellenbereich Sie können den Befehl Tabelle optimieren
übergeben, um Systemdateien zu verkleinern.
Verwenden Sie einen unabhängigen Tabellenbereich für Innodb
Stoppen Sie den MySQL-Dienst, ändern Sie Parameter und löschen Sie Innodb-bezogene Dateien.
Starten Sie den MySQL-Dienst neu. Erstellen Sie den Innodb-Systemtabellenbereich neu DatenInnodb ist eine Transaktionsspeicher-Engine | unterstützt vollständig die zuvor eingeführten ACID-Eigenschaften von Transaktionen (Atomizität, Konsistenz usw.) | |
---|---|---|
5.2.4 (Erweitert) Was ist eine Sperre | ||
Die Hauptfunktion von Sperren besteht darin, den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen zu verwalten. | Sperren werden verwendet, um eine Transaktionsisolation zu erreichen | Exklusive Sperre (auch Schreibsperre genannt)
In tatsächlichen Situationen können die Ergebnisse von den Ergebnissen in der obigen Tabelle abweichen, hauptsächlich weil der Sperrmechanismus in Innodb sehr komplex ist und es viele Sperren gibt, die sich auf das Endergebnis auswirken. 5.2.3.4 Sperrgranularität:
Sperre auf Tabellenebene Irgendwann muss die Sperre in einer Transaktion warten, bis die Sperre einer anderen Transaktion freigegeben wird, und die von ihr belegten Ressourcen bilden einen Block.
Deadlock: Deadlock bezieht sich auf eine Ausnahme, die auftritt, wenn zwei oder mehr Transaktionen die Ressourcen belegen, auf die die andere Partei während der Ausführung der Transaktion wartet. Wie aus der Definition hervorgeht, belegen mehrere blockierte Transaktionen die Ressourcen, auf die die blockierte Transaktion wartet, und ein Deadlock liegt vor, wenn mehrere blockierte Transaktionen die Ressourcen belegen, auf die die jeweils andere wartet.Wenn wir die CSV-Speicher-Engine-Tabelle in MySQL erstellen, sollten wir die Dateien in den 3 Dateisystemen sehen können. Diese drei Dateinamen basieren alle auf dem Tabellennamen, haben jedoch jeweils die Suffixe csv, csm und frm. Die CSV-Datei ist die Datendatei in der CSV-Speicher-Engine. Die CSM-Datei speichert die Metadaten der Tabelle sowie den Tabellenstatus und das Datenvolumen. In der FRM-Datei werden Informationen zur Tabellenstruktur gespeichert.
5.3.1 Funktionen der CSV-Speicher-EngineDie größte Funktion ist die Datenspeicherung im CSV-Format Jede Spalte in CSV ist durch ,
getrennt und der Inhalt des Textes ist eingeschlossen in doppelten Anführungszeichen, wie unten gezeigt:
Alle Spalten müssen ungleich NULL sein
Beim Erstellen einer Tabelle müssen alle Spalten ungleich NULL sein und können nicht als NULL-Werte gespeichert werden
Unterstützt keine Indizes Nicht für große Tabellen geeignet
Kann Datendateien direkt bearbeiten.,
来分隔的,并且文本的内容是以双引号来引起来的,如下图所示:5.3.2 CSV存储引擎的适用场景
CSV存储引擎适合作为数据交换的中间表
5.4 Archive存储引擎
5.4.1 文件系统存储特点
Archive存储引擎会缓存所有的写,并且利用zlib对插入的行进行压缩,因此Archive存储引擎相对于MyISAM存储引擎的表更加节省磁盘I/O,对于同样数量级的数据,Archive存储引擎相对于MyISAM和Innodb更加节省存储空间。一个几T的Innodb的表存储在Archive存储引擎当中,可能只需要几百兆的存储空间。
Archive存储引擎的表的数据是以ARZ为后缀的一个文件,和其他引擎一样,也存在一个以frm为后缀的系统文件,用于存储表的结构信息。
5.4.2 Archive存储引擎的特点
insert
和select
5.4.1 Dateisystemspeicherfunktionen
Die Archivspeicher-Engine speichert alle Schreibvorgänge zwischen und verwendet zlib, um eingefügte Zeilen zu komprimieren. Daher spart die Archivspeicher-Engine Festplatten-E/A im Vergleich zu den Tabellen der MyISAM-Speicher-Engine. Bei Daten in derselben Größenordnung spart die Archivspeicher-Engine Festplatten-E/A im Vergleich zu MyISAM MyISAM-Tabellen sparen mehr Speicherplatz. Eine mehrere Terabyte große Innodb-Tabelle wird in der Archivspeicher-Engine gespeichert und benötigt möglicherweise nur einige hundert Megabyte Speicherplatz. Die Tabellendaten der Archivspeicher-Engine sind eine Datei mit dem Suffix ARZ. Wie bei anderen Engines gibt es auch eine Systemdatei mit dem Suffix frm, die zum Speichern der Strukturinformationen der Tabelle verwendet wird. 5.4.2 Funktionen der Archiv-Speicher-Engine 5.4.3 Nutzungsszenarien der Archivspeicher-Engine
Szenario 1: Protokoll- und Datenerfassungsdaten Da das Archiv das Ändern und Löschen nicht unterstützt, ändert unser ORDB die Daten auf jeden Fall, bei einigen Lagertypanwendungen oder einigen speziellen Tabellen jedoch immer noch B. Protokollierungstabellen oder Datenerfassungstabellen. Da sie große Datenmengen sammeln müssen, ist die Archivspeicher-Engine besser geeignet. Da die Archivspeicher-Engine unter allen Engines über den kleinsten Speicherplatz verfügt, ist zu beachten, dass die Archivspeicher-Engine diese Daten auch in Datenerfassungs- oder Protokollierungsanwendungen nicht aktualisieren kann, z. B. beim Aufzeichnen von Protokollen oder wenn Sie die Daten in einer Datensammlung ändern Wenn Sie eine Anwendung verwenden, können Sie die Archivspeicher-Engine möglicherweise nicht verwenden.
5.5 Speicher-Engine
🎜5.5.1 Dateisystem-Speicherfunktionen🎜🎜Die Speicher-Engine wird auch als HEAP-Speicher-Engine bezeichnet. Dies bedeutet, dass die Datentabelle gelöscht wird. Sobald der MySQL-Dienst neu gestartet wird, verschwinden alle Daten der Speicher-Engine, die Struktur bleibt jedoch bestehen bleibt erhalten, da beim Erstellen einer Tabelle unter der Speicherspeicher-Engine nur eine FRM-Systemdatei generiert wird, die zum Speichern der Tabellenstruktur verwendet wird. Aus diesem Grund gehen beim Neustart des MySQL-Servers Daten verloren, die Tabellenstruktur jedoch nicht.
Anhand der Dateispeichereigenschaften können wir erkennen, dass die E/A-Effizienz der Speicherspeicher-Engine viel höher ist als die von MyISAM, da nur der Index von MyISAM im Speicher gespeichert wird und die Daten vom Betriebssystem zwischengespeichert werden Während die Speicher-Engine Daten und Indizes im Speicher speichert, werfen wir einen Blick auf die Funktionen der Speicher-Engine.
5.5.2 Funktionsmerkmale von Memory Wenn Sie eine Bereichsabfrage durchführen, können Sie den HASH-Index nicht verwenden. Daher müssen wir beim Erstellen der Tabelle aufpassen. Wenn die Tabelle eine große Anzahl gleichwertiger Abfragen erfordert, verwenden Sie den HASH-Index und für Bereichsabfragen den BTree-Index. Verschiedene Indextypen können einen großen Einfluss auf die Leistung haben. Alle Felder haben eine feste Länge varchar(10) = char(10)
Dies erfordert, dass wir bei der Definition der Tabellenstruktur die Mindestanforderungen an die Feldlänge erfüllen, da sonst viel Speicher verschwendet wird. Unterstützt keine großen Felder wie BLOG und TEXTtemporäre Tabelle erstellen
erstellt wurde. Die erstellte Tabelle kann jede Speicher-Engine verwenden. 5.5.4 Speichernutzungsszenarien
Wird zum Nachschlagen oder Zuordnen von Tabellen verwendet, z. B. Postleitzahlen- und Regionskorrespondenztabellen.
Wird zum Speichern von Zwischentabellen verwendet, die während der Datenanalyse generiert wurden.
Wird zum Zwischenspeichern der Ergebnisse der periodischen Aggregation verwendet Datentabellecreate temporary table
建立的临时表,建立的表可以使用任何存储引擎。
无论是哪种临时表,只对内部可见。
5.5.4 Memory的使用场景
Memory数据易丢失,所以要求数据可再生。
5.6 Federated存储引擎
5.6.1 Federated的特点
5.6.2 Federated如何使用
Federated存储引擎可以实现SQL Server连接服务器的功能,但是由于本身的性能并不太好,通常可以通过复制等实现相同的目的,所以在当前的MySQL版本中,Federated存储引擎默认是禁止的。如果需要使用Federated存储引擎,则需要在/usr/local/mysql/my.cnf
中加入federated=1
,接着重启MySQL服务器,我们可以通过show engine
来确认当前MySQL服务器是否支持Federated存储引擎。
而在create table
语句中使用下面的连接字符串,mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
远程服务器绑定连接:grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identified by '123456'
5.6.1 Funktionen von Federated Es wird gesagt, dass alle Tabellen, auf die wir zugreifen möchten, immer noch auf dem Remote-Server abgelegt sind und keine Daten lokal gespeichert werden. Bei jedem Zugriff auf eine Federated Storage Engine-Tabelle wird die Abfrage zur Ausführung an den Remote-Server gesendet und die relevanten Daten werden vom Remote-MySQL-Server abgerufen.
5.6.2 Verwendung von Federated 🎜Die Federated-Storage-Engine kann die Funktion einer SQL Server-Verbindung zum Server realisieren. Aufgrund ihrer eigenen Leistung kann jedoch normalerweise derselbe Zweck erreicht werden Replikation usw., daher ist in der aktuellen MySQL-Version die Federated Storage Engine standardmäßig deaktiviert. Wenn Sie die Federated Storage Engine verwenden müssen, müssen Sie
federated=1
zu /usr/local/mysql/my.cnf
hinzufügen und dann den MySQL-Server neu starten. Wir können show engine
übergeben, um zu bestätigen, ob der aktuelle MySQL-Server die Federated Storage Engine unterstützt. 🎜 Und verwenden Sie die folgende Verbindungszeichenfolge in der create table
-Anweisung: 🎜mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
🎜 Remote Server Bindungsverbindung: 🎜grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identifiziert durch '123456'
🎜 Sie können die relevanten Informationen des Remote-Servers ermitteln, die abgefragt werden sollen und einige Informationen zu verwandten Datenbanktabellen. 🎜🎜🎜5.6.3 Anwendbare Szenarien von Federated🎜🎜🎜🎜Gelegentliche statistische Analyse und manuelle Abfrage🎜 Aufgrund der langsamen Leistung von Federated ist es nur für gelegentliche statistische Analysen und manuelle Abfragen geeignet. 🎜🎜🎜🎜6 So wählen Sie die richtige Speicher-Engine aus🎜🎜🎜Referenzbedingungen: 🎜Weitere verwandte kostenlose Lernempfehlungen: MySQL-Tutorial(Video)
Das obige ist der detaillierte Inhalt vonBig Data Learning Teil 2 MYSQL Advanced. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!