1. 事件平安表:InnoDB
、BDB
。
2. 非事件平安表:MyISAM
、MEMORY
、MERGE
、EXAMPLE
、NDB Cluster
、ARCHIVE
、CSV
、BLACKHOLE
、FEDERATED
等
MySQL默许的存储引擎是MyISAM(5.7版本中默许为InnoDB)。
配置文件中设置默许存储引擎的参数:default-table-type。
查询当前数据库支撑的存储引擎:
show engines; show variables like 'have%';
检察当前的默许存储引擎:
show variables like '%table_type%';
建立新表时指定存储引擎:
create table(...) engine=MyISAM;
下面细致引见4个比较经常运用的存储引擎:MyISAM
、InnoDB
、MEMORY
和MERGE
。
一、MyISAM
1. 数据文件:
MyISAM数据表在磁盘存储成3个文件,其文件名都和表名雷同,扩大名分别是:
(1).frm:存储数据表构造定义。
(2).MYD:存储表数据。
(3).MYI:存储表索引。
个中,数据文件和索引文件能够安排在差别的目次,均匀散布IO,取得更快的速率。指定索引文件和数据文件的途径,须要在建立表的时刻经由过程data directory和index directory语句指定。(文件途径需假如绝对途径而且具有接见的权限)
MyISAM范例的表能够会破坏,缘由多是多种多样的,破坏后的表能够不能接见,会提醒须要修复或许接见后返回毛病的效果。能够运用check table语句来搜检MyISAM表的康健,并用repair table语句修复已破坏的MyISAM表。
2. 存储花样:
(1)静态表(默许):字段都黑白变长的(每一个纪录都是牢固长度的)。存储异常敏捷、轻易缓存,涌现毛病轻易恢复;占用空间一般比动态表多。
(2)动态表:占用的空间相对较少,然则频仍的更新删除纪录会发生碎片,须要按期实行optimize table或myisamchk -r敕令来改良机能,而且涌现毛病的时刻恢复比较难题。
(3)紧缩表:运用myisampack东西建立,占用异常小的磁盘空间。因为每一个纪录是被零丁紧缩的,所以只要异常小的接见开支。
静态表的数据在存储的时刻会根据列的宽度定义补足空格,在返回数据给运用之前去掉这些空格。假如须要保存的内容背面原本就有空格,在返回效果的时刻也会被去掉。(现实上是数据范例char的行动,动态表中如有这个数据范例也一样会有这个题目)
(静态表和动态表是根据正运用的列的范例自动挑选的。)
3. 优劣势:
(1)上风:接见的速率快。
(2)不支撑事件、也不支撑外键。
4. 实用状况:
假如运用是以读操纵和插进去操纵为主,只要很少的更新和删除操纵,而且对事件的完全性、并发性请求不是很高,那末挑选这个存储引擎黑白常适宜的。MyISAM 是在Web、数据仓库和其他运用环境下最常运用的存储引擎之一。
二、InnoDB
1. 存储体式格局:
InnoDB存储表和索引有以下两种体式格局:
(1)运用同享表空间存储:这类体式格局建立的表构造保存在.frm文件中,数据和索引保存在innodb_data_home_dir
和innodb_data_file_path
定义的表空间中,能够是多个文件。
(2)运用多表空间存储:这类体式格局建立的表构造依然保存在.frm文件中,然则每一个表的数据和索引零丁保存在.idb文件中。假如是个分区表,则每一个分区对应零丁的.idb文件,文件名是“表名+分区名”,能够在建立分区的时刻指定每一个分区的数据文件的位置,以此来将表的IO均匀散布在多个磁盘上。
要运用多表空间的存储体式格局,须要设置参数innodb_file_per_table
并重启效劳器后才能够见效,而且只对新建的表见效。多表空间的数据文件没有大小限定,不须要设置初始大小,也不须要设置文件的最大限定、扩大大小等参数。纵然在多表空间的存储体式格局下,同享表空间依然是必需的,InnoDB把内部数据辞书和事情日记放在这个文件中,所以备份运用多表空间特征的表时直接复制.idb文件是不可的,能够经由过程敕令将数据备份恢复到数据库中:
ALTER TABLE tbl_name DISCARD TABLESPACE; ALTER TABLE tbl_name IMPORT TABLESPACE;
然则如许只能恢复到表本来地点数据库中,假如须要恢复到其他数据库则须要经由过程mysqldump和mysqlimport来完成。
2. 数据文件:
InnoDB的数据文件由表的存储体式格局决议。
(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环境非常适宜。
以上内容为人人细致引见了四个经常运用数据库存储引擎,更多相干题目请接见ki4网:Mysql视频教程
以上就是关于Mysql中四种经常运用存储引擎的细致引见以及怎样准确挑选的细致内容,更多请关注ki4网别的相干文章!