MySQL作为全世界广受欢迎的数据库,被用于很多中小型的项目中,但是你对 MySQL 数据库的存储引擎了解多少呢?

  我们将逻辑表中的数据存储到数据库中,数据库又将我们表中的数据存储到物理设备中(如磁盘,内存)。数据在物理设备上如何存储?如何创建索引?如何进行增删该查操作?对数据在物理设备上的存储和操作方式(或者说是类型、服务)就称为数据库引擎。

  比如,在赛车比赛中,如果赛车手根据不同的比赛地形选择合适的赛车引擎,就能够让赛车跑得更快。MySQL 数据库支持插拔式的存储引擎,可以很方便的更换不同的数据库引擎,相比较而言,赛车手更换引擎就没那么方便了。MySQL 数据库的逻辑架构图如下,可以看到,存储引擎在整个 MySQL 数据库系统中位于底层。

  

  在 命令行中使用 show engines 查看 MySQL 数据库引擎,从下图中可以看出当前 MySQL 默认的数据库引擎就是 InnoDB。(我这里的 MySQL 为社区版 5.7 版本,请自行忽略背景中的小姐姐,手动滑稽~。)

  

  下面我将一一介绍这些数据库引擎。

  InnoDB 引擎:

  自从 MySQL5.6 后,InnoDB 就是 MySQL 默认的存储引擎,在这之前是 MyISAM 引擎。

  InnoDB支持事务,支持外键,支持自动的灾难恢复,使用行锁支持高并发的读取,支持热备份和奔溃后的快速恢复,支持全文检索(5.6.4版本才支持,所以一些面试题由于时间原因可能这里不严谨),有自己的读写缓存管理机制,即缓存索引也缓存数据,不支持压缩(未来可能支持)。

  使用 InnoDB 引擎创建表,会生成 frm 文件和 idb 文件,frm 文件中存储表的定义,idb 文件中存储表的数据和索引。

  

  一般来说,InnoDB 对于大多数情况都是很不错的选择,能满足绝大多数的需要,这也是它称为MySQL5.6 之后默认数据库引擎的原因。

  MyISAM 引擎:

  MyISAM不支持事务,不支持奔溃后快速恢复,使用表锁不适合高并发,追求性能,依赖操作系统管理读取和写入的缓存,只缓存索引不缓存真实数据,支持压缩。

  使用 MyISAM 引擎创建表,会生成 frm 文件、MYD文件和MYI文件,frm 文件中存储表的定义,MYD 文件中存储表的数据,MYI文件中存储表的索引。

  

  因为 MyISAM 引擎不支持事务处理,所以意味着有事务需求时,不能使用 MyISAM 存储引擎。MyISAM 追求的是性能,适合插入和读取操作。

  MRG_MyISAM (MERGE)引擎:

  MRG_MyISAM引擎是一组 MyISAM 表的组合,在MySQL5.7 之前叫做 MEGER。

  使用 MEG_MyISAM 引擎创建表,会生成 frm 文件和 MRG 文件,frm 文件中存储表的定义,MEG 文件存储表的数据。

  MEG_MyISAM引擎需要主表 MERGE 和子表具有完全一样的数据结构(属性、数据类型、索引)。对于存储策略是分成多表,如日志表,按照一年十二个月份划分,需要 12 张定义完全一样的数据表。当联合多个月份的表查询数据时,需要写多个表的连接,这时使用 MEG_MyISAM 引擎只需要像对待一张表一样查询,对数据的操作就变得简单了。

  MEMORY 引擎:

  MEMEORY速度快,数据直接存储在内存中。

  使用 MEMORY 引擎创建表,只会生成 frm 文件,因为表的数据是暂时存放在内存中的。

  MEMORY追求的是速度,为了得到更快的响应时间,采用速度相对磁盘快得多的内存做为存储介质,可以作为临时表使用。但由于数据是放在内存中的,表中的数据需要立即使用,否则当 MySQL守护进程奔溃时,表中的数据就会丢失。

  CSV 引擎:

  使用 CSV 引擎创建表,会生成 frm 文件,CSV 文件和CSM文件,frm 文件中存储表的定义,CSV 文件中存储表的数据,CSM 文件中存储表的元信息(如数据表现在的状态,数据表中的数据数量)。

  生成的数据文件可直接使用 Office 中的 Excel 打开,但要注意文件损坏,必要时可使用命令 check table、repair table 检查和恢复表。

  BLACKHOLE 引擎:

  BLACKHOLE如同它的名字,插入任何数据都不会保存,表永远为空,写入任何数据都会消失,就像是黑洞一样,可以吃掉所有的数据。

  使用 BLACKHOME 引擎创建表,只会生成 frm 文件,frm 文件中存储表的定义,因为写入任何数据都不会保存,所以也就没有存储表数据的文件。

  BLACKHOLE不会保存数据,所以数据表可以作为演示使用,随意的增删改查,最终都不会在表中留下数据。

  PERFORMANCE_SCHEMA 引擎:

  该引擎用于收集数据库性能相关的参数,是 MySQL 的性能模式,主要关注性能数据。用户不能直接创建存储引擎为PERFORMANCE_SCHEMA 的表。

  ARCHIVE 引擎:

  ARICHIVE支持数据压缩,支持插入和查询操作两种功能。

  使用 ARCHIVE 引擎创建表,会生成 frm 文件和 ARZ 文件,frm 文件中存储表的定义,ARZ 文件中存储表的压缩后的数据和索引。

  FEDERATED 引擎:

  支持代理查询,即创建一个远程的 MySQL客户端连接,将要查询的语句传输到远程服务器上执行,完成数据的存取。

  从上图中可以看到,社区版的 MySQL 并不支持 FEDERATED 引擎。

  除了上面这些数据库引擎,你还可以使用自己开发的数据库引擎,MySQL 提供了很好的扩展性。

  根据自己的需要使用数据库引擎,才能发挥出数据库的性能和满足实际的需要。在选择 MySQL 数据库引擎之前,你要考虑下面几个问题。

  ·1、是否需要支持事务?

  ·2、是否需要热备份?

  ·3、是否需要奔溃恢复?

  ·4、是否需要外键支持?

  ·5、存储的限制?

  ·6、对索引和缓存的支持?

  这里也提供一张各种引擎对照表供你查看,一般来说 InnoDB 是个万金油式的选择,InnoDB 和 MyISAM 引擎最常用。

  

  

语言小知识-MySQL数据库引擎的更多相关文章

  1. mysql 数据库引擎

    一.数据库引擎 数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或 ...

  2. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  3. 常用mysql数据库引擎——MyISAM和InnoDB区别

    背景: 昨天做项目时,发现使用事务后回滚不了,后来把数据库引擎从MyISAM换成InnoDB后果断好了,如下图: 正文: MyISAM和InnoDB是mysql常用的数据库引擎,他们的区别如下: 数据 ...

  4. [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  5. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别

    转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  6. MYSQL数据库引擎区别详解

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

  7. Mysql数据库引擎介绍--转载

    引用博文链接:https:/www.cnblogs.com/zhangjinghe/p/7599988.html MYSQL数据库引擎区别详解 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安 ...

  8. MySQL数据库引擎、事务隔离级别、锁

    MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...

  9. 如何查看mysql数据库的引擎/MySQL数据库引擎详解

    一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mys ...

随机推荐

  1. APPIUM Android 定位方式

    原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...

  2. JS 转整型

    1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4, ...

  3. js随机点名系统

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Java获取配置文件跟路径

    一直以为使用new File(相对路径)可以读取class目录下的文件,其实不然.网上查询了一些资料,弄清楚了原理,总结如下: package com.coshaho.learn; import ja ...

  5. mysql B+Tree索引

    原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 数据结构及算法基础 索引的本质 MySQL官方对索引的定义为:索 ...

  6. OGNL mybatis

    http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其 ...

  7. PHP empty、isset、isnull的区别

    PHP empty.isset.isnull的区别 empty 如果 变量 是非空或非零的值,则 empty() 返回 FALSE.换句话说,”".0.”0″.NULL.FALSE.arra ...

  8. SpringBoot——定时任务+WebSocket(问题)

    开发环境:win7 + idea2018 + jdk 1.8 + springboot 2.x 记一次出现问题,我在项目中先集成了websocket环境,并且测试通过,之后想要模拟实时推送的效果,虽然 ...

  9. AI+教育落地,百度大脑如何让校园更智能?

    人工智能作为影响社会底层技术革命逐渐向传统行业渗透,“AI+”已经替代“互联网+”成为创业创新的新引擎,出人意料的是,在AI在教育业的率先落地并且相当火爆. 现在,人工智能教育已成为从业者心目中的“教 ...

  10. Notepad++ 主题配色配置

    以下方法来源网络,仅供参考: 方案1: 1.主题名称:Obsidian 2.字体字号:Courier New 10 (这里字体你可以随意选择,让自己满意即可) 3.设置方法:设置---语言格式设置-- ...