MySQL数据库引擎

什么是数据库引擎

数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

当你访问数据库时,并不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件

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引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值