什么是数据库引擎
数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。
当你访问数据库时,并不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件。
MySQL支持的存储引擎
在数据库命令行页面输入: show engines;即可显示数据库支持的引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
MySQL文件类型及后缀
(一)MyISAM:
1、简介
MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎(Mysql5.1前)。MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。MyISAM拥有较高的插入、查询速度,但不支持事务。
2、特点
- 数据存储方式简单,使用- B± Tree- 进行索引
- 使用三个文件定义一个表:.MYI- - - .MYD- - - .frm
- 少碎片、支持大文件、能够进行索引压缩
- 二进制层次的文件可以移植- (Linux -> Windows)
- 访问速度飞快,是所有MySQL文件引擎中速度最快的
- 不支持一些数据库特性,比如- 事务、外键约束等
- Table- level- lock,性能稍差,更适合读取多的操作
- 表数据容量有限,一般建议单表数据量介于- - 50w–200w
3、存储结构
每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义;
·MYD (MYData)文件存储表的数据;
.MYI (MYIndex)文件存储表的索引。
索引结构
(二) InnoDB
1、简介
InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎。在没有特殊情况下,一般优先使用InnoDB存储引擎。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction),支持行锁定和外键。
2、特点
- 使用- Table- Space- 的方式来进行数据存储- (ibdata1,- ib_logfile0)
- 支持- 事务、外键约束等数据库特性
- Rows- level- lock- ,- 读写性能都非常优秀
- 能够承载大数据量的存储和访问
- 拥有自己独立的缓冲池,能够缓存数据和索引
- 在关闭自动提交的情况下,与MyISAM引擎速度差异不大
3、数据结构
文件存储形式:使用InnoDB时,会将数据表分为.frm 和 .idb两个文件进行存储。
-
*.frm
表定义文件。访问特点:极少改动、整体访问 -
*.ibd
表数据文件。访问特点:大量随机读写
数据存储形式:InnoDB表是基于聚簇索引建立的,聚簇索引对主键的查询有很高的性能,不过他的二级索引(非主键索引)必须包含主键列,否则索引会很大。
(三)MEMORY存储引擎
1、简介
MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。为查询和引用其他表数据提供快速访问。
2、存储
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。
3、索引或事物
MEMORY默认使用哈希索引。速度比使用B型树索引快。当然如果你想用B型树索引,可以在创建索引时指定。
注意:
1、使用此引擎,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,需要释放内存,甚至删除不需要的表。
2、显而易见的是数据文件放入内存中,意味着当服务器关机、重启、宕机之后,所有的数据就会丢失,生命周期很短。一般来说都是一次性的。
(四)CSV引擎
1、简介
数据库的引擎之一,逻辑上由逗号分割数据的存储引擎,他是相对比较简单的数据库引擎。MySQL5.0以上才支持该引擎。
CSV存储引擎不支持索引,不支持事务。
2、存储
它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,列之间用逗号或空格分隔,每个数据行占用一个文本行。
实际上操作维护的是一个标准的CSV文件。
3、优缺点
优点:简单,修改数据可以 直接修改 .CSV 文件(使用excel打开)
缺点:因为操作简单,不安全。
4、使用场景
因为不安全,所以一般来说CSV很少用来使用的。但是因为很简单,这个CSV引擎用来专门导入数据。
大型数据库移动数据的时候,生成的文件都是10G以上的,甚至只能上T,这种数据文件根本无法打开,因为你打开或者是复制之后,数据就已经填满内存,然后接着就内存溢出了。
这个时候这就需要使用CVS引擎了,使用工具或者是脚本,将数据一行一行读入CVS文件中,通过数据库的导入功能直接导入CVS文件中,数据库就生成了表、数据以及当前使用引擎的数据文件。
(五)PERFORMANCE_SCHEMA
1、简介
从MySql5.5开始新增加了一个数据库:performance_schema,其引擎为:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.6开始,Performance Schema 默认打开。
Performance Schema 提供了一种在服务器运行时检查服务器的内部执行的方法。数据收集是通过修改服务器源代码来实现的。 不同于其他功能(如复制或Event Scheduler),不存在与Performance Schema相关联的单独线程。
服务器监控持续不中断地进行,花费很少。 开启Performance Schema不会使服务器不可用。
2、存储
Performance Schema 中的表是内存表,不使用磁盘存储,在 datadir 的 performance_schema 目录下,只有.frm表结构文件,没有数据文件。表内容在服务器启动时重新填充,并在服务器关闭时丢弃。
(六)ARCHIVE
1、简介
ARCHIVE引擎顾名思义:数据归档引擎。他专门用来用来存储历史数据,因为他的压缩比非常高,同样的数据,比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。其设计目标只是提供高速的插入和压缩功能。这个引擎只允许插入和查询,不允许修改和删除。
2、存储
每个archive表在磁盘上存在两个文件
.frm(存储表定义)
.arz(存储数据)
往archive表插入的数据会经过压缩,archive使用zlib进行数据压缩,archive支持optimize table、 check table操作,支持插入跟查询,不支持更新跟删除操作。
3、事物及索引
它不支持索引同时也不能缓存索引和数据,所以它不适合作为并发访问表的存储引擎。Archivec存储引擎使用行锁来实现高并发插入操作,但是它不支持事务。
当你需要把数据从一台MySQL服务器转移到另一台的时候,Archive表可以方便地移植到新的MySQL环境,你只需将保存Archive表的底层文件复制过去就可以了。
(七)MRG_MyISAM(Merge)引擎。
1、简介
MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。"相同"意味着所有表同样的列和索引信息。
2、存储
MyISAM引擎表不存储数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。
当你创建一个merge表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为merge表自身,没有必要在同一个数据库中。
3、事务
不支持事务
4、使用场景
大型网络网站的数据是十分多的,有的时候一张表的而数据可以达到亿条数据,这个时候,为了提高查询数据,就需要进行分表,使用的就是MRG_MYISAM引擎