Es gibt zwei Hauptkategorien von MySQL-Speicher-Engines:
1. Transaktionssicherheitstabelle : InnoDB
, BDB
.
2. Nicht transaktionssichere Tabelle : MyISAM
, MEMORY
, MERGE
, EXAMPLE
, NDB Cluster
, ARCHIVE
, CSV
, BLACKHOLE
, FEDERATED
usw.
Die Standardspeicher-Engine von MySQL ist MyISAM (die Standardeinstellung ist InnoDB in Version 5.7).
Legen Sie die Parameter der Standardspeicher-Engine in der Konfigurationsdatei fest: default-table-type.
Fragen Sie die von der aktuellen Datenbank unterstützte Speicher-Engine ab:
show engines; show variables like 'have%';
Zeigen Sie die aktuelle Standard-Speicher-Engine an:
show variables like '%table_type%';
Geben Sie die Speicher-Engine an, wenn Sie eine neue Tabelle erstellen:
create table(...) engine=MyISAM;
Im Folgenden finden Sie eine detaillierte Einführung in vier häufig verwendete Speicher-Engines: MyISAM
, InnoDB
, MEMORY
und MERGE
.
1. MyISAM
1. Datendateien:
Die MyISAM-Datentabelle wird in Form von 3 Dateien auf der Festplatte gespeichert Dasselbe wie die Tabellennamen. Die Erweiterungen sind:
(1).frm: speichert die Definition der Datentabellenstruktur.
(2).MYD: Tabellendaten speichern.
(3).MYI: Speichertabellenindex.
Unter anderem können Datendateien und Indexdateien in verschiedenen Verzeichnissen abgelegt werden, um E/A gleichmäßig zu verteilen und schnellere Geschwindigkeiten zu erzielen. Geben Sie die Pfade der Indexdateien und Datendateien an, die beim Erstellen der Tabelle über die Datenverzeichnis- und Indexverzeichnisanweisungen angegeben werden müssen. (Der Dateipfad muss ein absoluter Pfad sein und über Zugriffsberechtigungen verfügen)
Die MyISAM-Typtabelle kann aus verschiedenen Gründen beschädigt sein. Auf die beschädigte Tabelle kann möglicherweise nicht zugegriffen werden, und es wird angezeigt, dass sie repariert werden muss zugegriffen wird. Gibt falsche Ergebnisse zurück. Sie können die Check-Table-Anweisung verwenden, um den Zustand der MyISAM-Tabelle zu überprüfen, und die Repair-Table-Anweisung verwenden, um die beschädigte MyISAM-Tabelle zu reparieren.
2. Speicherformat:
(1) Statische Tabelle (Standard): Felder haben eine nicht variable Länge (jeder Datensatz hat eine feste Länge). Der Speicher ist sehr schnell, einfach zwischenzuspeichern und nach Ausfällen leicht wiederherzustellen; er nimmt normalerweise mehr Platz ein als dynamische Tabellen.
(2) Dynamische Tabelle: Sie nimmt relativ wenig Platz ein, aber häufige Aktualisierungen und Löschungen von Datensätzen führen zu Fragmenten. Sie müssen den Befehl „optimize table“ oder „myisamchk -r“ regelmäßig ausführen, um die Leistung zu verbessern und den Vergleich wiederherzustellen wenn ein Fehler auftritt.
(3) Komprimierte Tabelle: Mit dem Tool myisampack erstellt, nimmt sie nur sehr wenig Speicherplatz ein. Da jeder Datensatz einzeln komprimiert wird, entsteht nur ein sehr geringer Zugriffsaufwand.
Beim Speichern der Daten in der statischen Tabelle werden Leerzeichen entsprechend der Spaltenbreitendefinition ausgefüllt und diese Leerzeichen werden entfernt, bevor die Daten an die Anwendung zurückgegeben werden. Wenn nach dem Inhalt, der gespeichert werden muss, Leerzeichen stehen, werden diese bei der Rückgabe der Ergebnisse ebenfalls entfernt. (Eigentlich ist es das Verhalten des Datentyps char. Wenn dieser Datentyp in der dynamischen Tabelle vorhanden ist, tritt dieses Problem auch auf)
(Statische Tabellen und dynamische Tabellen werden automatisch basierend auf dem Typ ausgewählt Spalten verwendet werden.)
3. Vor- und Nachteile:
(1) Vorteile: Schneller Zugriff.
(2) Unterstützt keine Transaktionen oder Fremdschlüssel.
4. Anwendbare Situationen:
Wenn die Anwendung hauptsächlich auf Lesevorgängen und Einfügevorgängen basiert, gibt es nur wenige Aktualisierungs- und Löschvorgänge und die Integrität von Bei der Transaktion sind die Parallelitätsanforderungen nicht sehr hoch, daher ist die Wahl dieser Speicher-Engine sehr gut geeignet. MyISAM ist eine der am häufigsten verwendeten Speicher-Engines in Web-, Data Warehouse- und anderen Anwendungsumgebungen.
2. InnoDB
1. Speichermethode:
InnoDB verfügt über die folgenden zwei Speichertabellen und Indizes Methode:
(1) Gemeinsamen Tabellenbereichsspeicher verwenden: Die auf diese Weise erstellte Tabellenstruktur wird in der .frm-Datei gespeichert, und die Daten und Indizes werden in den durch innodb_data_home_dir
und . Sie können mehrere Dateien haben. innodb_data_file_path
festlegen und den Server neu starten, bevor er wirksam wird. Er wird nur für neu erstellte Tabellen wirksam. Es gibt keine Größenbeschränkung für Datendateien in mehreren Tabellenbereichen. Es ist nicht erforderlich, die Anfangsgröße, die maximale Grenze, die erweiterte Größe und andere Parameter der Datei festzulegen. Selbst im Speichermodus mehrerer Tabellenbereiche sind weiterhin gemeinsam genutzte Tabellenbereiche erforderlich, in denen InnoDB das interne Datenwörterbuch und das Arbeitsprotokoll ablegt. Daher ist es nicht möglich, die .idb-Datei beim Sichern von Tabellen, die Multi verwenden, direkt zu kopieren -Table Space-Funktion können Sie die Datensicherung in der Datenbank über den folgenden Befehl wiederherstellen: innodb_file_per_table
ALTER TABLE tbl_name DISCARD TABLESPACE; ALTER TABLE tbl_name IMPORT TABLESPACE;Dies kann jedoch nur in der ursprünglichen Datenbank wiederhergestellt werden, in der sich die Tabelle befindet, wenn Sie eine andere wiederherstellen müssen Bei Datenbanken müssen Sie dazu mysqldump und mysqlimport verwenden.
2. Datendatei:
Die Datendatei von InnoDB wird durch die Speichermethode der Tabelle bestimmt.(1)共享表空间文件:由参数innodb_data_home_dir
和innodb_data_file_path
定义,用于存放数据词典和日志等。
(2).frm:存放表结构定义。
(3).idb:使用多表空间存储方式时,用于存放表数据和索引,若使用共享表空间存储则无此文件。
3. 外键约束:
InnoDB是MySQL唯一支持外键约束的引擎。外键约束可以让数据库自己通过外键保证数据的完整性和一致性,但是引入外键会使速度和性能下降。在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
外键约束使用示例:
CREATE TABLE `dep` ( `id` smallint(6) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `dep_id` smallint(6) NOT NULL, PRIMARY KEY (`id`), KEY `idx_fk_dep_id` (`dep_id`), CONSTRAINT `fk_emp_dep` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
KEY
:定义索引约束名称。
CONSTRAINT
:定义外键约束名称。(在数据库中应是唯一的,若不指定系统会自动生成一个约束名)
ON
:指定父表操作对子表的影响(不定义默认采用restrict)。
Restrict
和no action
:在子表有相关记录的情况下父表不能更新或删除。
Cascade
:在父表更新或删除时,同时更新或删除子表对应的记录。
Set null
:在父表更新或删除的时候,子表的对应字段被设置为null。
当某个表被其他表创建了外键参照,那么这个表的对应索引或者主键禁止被删除。在导入多个表的数据时,如果需要忽略表的导入顺序,可以暂时关闭外键的检查;在执行load data和alter table操作的时候,也可以通过暂时关闭外键约束来加快处理的速度。
关闭命令:
set foreign_key_checks=0;
开启命令:
set foreign_key_checks=1;
4. 优劣势:
(1)优势:提供了具有提交、回滚和崩溃恢复能力的事务安全。
(2)劣势:相比MyISAM,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。
5. 适用情况:
如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB 存储引擎应该是比较合适的选择。InnoDB 存储引擎除了有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB 都是合适的选择。
三、MEMORY
1. 数据文件:
每个MEMORY表只对应一个.frm磁盘文件,用于存储表的结构定义,表数据存放在内存中。默认使用HASH
索引,而不是BTREE
索引。
2. 优劣势:
(1)优势:访问速度非常快,因为数据是存在内存中的。
(2)劣势:一旦服务关闭,表中的数据就会丢失;对表的大小有限制。
3. 适用情况:
Memory存储引擎主要用在那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果。
四、MERGE
1. 引擎原理:
Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的实际的MyISAM表进行的。
通过insert_method
子句定义merge表的插入操作:使用first或last
可以使插入操作被相应地作用在第一或最后一个表上,不定义或定义为No表示不能对这个merge表进行插入操作。对merge表进行drop操作只是删除了merge的定义,对内部的表没有任何影响。
2. 数据文件:
(1).frm:存储表定义。
(2).MRG:存储组合表的信息,包括merge表由哪些表组成、插入新数据时的依据。可以通过修改.mrg文件来修改merge表,但是修改后要通过flush tables
刷新。
3. 使用示例:
CREATE TABLE `m1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `m2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `m` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`m1`,`m2`);
4. 适用情况:
用于将一系列等同的MyISAM 表以逻辑方式组合在一起,并作为一个对象引用它们。MERGE 表的优点在于可以突破对单个MyISAM 表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效地改善MERGE 表的访问效率。这对于诸如数据仓储等VLDB环境十分适合。
以上内容为大家详细介绍了四个常用数据库存储引擎,更多相关问题请访问PHP中文网:Mysql视频教程
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in die vier häufig verwendeten Speicher-Engines in MySQL und wie man sie richtig auswählt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!