备注:以下关于5.7版本的内容是来源于官方文档:https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 以下关于5.6版本的内容,一部分来源于自己使用过程中的经验总结,一部分来源于:http://www.w3resource.com/mysql/mysql-storage-engines.php 本来应该标记为译文比较合适,但中间又夹杂了一些自己的使用经历,不知道怎么合适,也就不知好歹的标记了个原创,
 恳请指正!

一、基本概述

存储引擎,是MySQL的一个组件,它用于处理不同类型表的SQL操作。InnoDB是MySQL默认的,也是最为常用的存储引擎。在非特殊要求的使用情况下,这也是Oracle极力推荐使用的一种存储引擎。

MySQL服务,使用可插拔的存储引擎架构,这样就使得存储引擎能够在一台运行的MySQL服务商,被装载或者被卸载。

要想知道自己的服务支持哪一种存储引擎,就得使用‘显示引擎’命令语句。这些值里面的数据则可以表示你是否可以使用某一种引擎,这些值里面会包含:yes,no,default。它们分别表示,可以使用,不支持和当前的默认引擎.

二、5.7支持的存储引擎

2.1,5.6版本引擎支持

经过命令查询,5.6所支持的引擎有(下图并未截取完整,只是为了说明这个数据的有效性):MRG_MYISAM、MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE、InnoDB、PERFORMANCE_SCHEMA

2.2,5.7版本引擎支持(来源于官方文档)

InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、NDB(NDBCLUSTER)、Merge、Federated、Example

2.3,各引擎的特点和功能

首先,总结一下5.7格外支持的存储引擎:NDB(NDBCLUSTER)、Federated、Example  PS:有些是一致的,比如说5.7的Merge和5.6的MRG_MYISAM

2.3.1,主要特点

InnoDB:从5.5开始,InnoDB是MySQL的默认存储引擎。它是事务安全的,提供:事务提交、回滚和恢复功能,以此保护用户的数据。InnoDB的行级锁和Oracle风格的无锁读操作,使其能够更好的应对高并发的情况,提高其性能。它允许用户以聚集索引的形式存储数据,以此减少常见的基于主键的I/O请求。而为了维护数据的完整性,它也支持外键完整性约束。

MyISAM表级锁限制了读/写的工作负载,所以,它经常被配置用于只读,或者主要工作是读的环境中

PS:简单说一下行级锁、表级锁、页级锁:行级,是说锁定具体的某一行数据,当一个操作获取行级锁时,其他的操作只能等待锁释放;表级,锁住全表,只能同时对于一个表进行读操作,不能同时写;页级,折中行级和表级,它锁住临近的数据记录,可以理解为锁定一页记录。

MEMORY:将所有的数据存储在随机读写存储器里面(RAM),主要是用于要求快速访问查找的环境中。这种引擎也被成为堆引擎,但随着使用的减少,InnoDB利用缓冲池数据区,提供了一个常用持久性的方法,将大部分数据,甚至是所有数据存储在内存里。NDBCLUSTER在同时也提供了一个巨大的分布式快速的键值查找方案。

CSV:它的表是使用逗号分隔的文本文件,允许用户导入或者转存CSV格式的数据,在交换脚本数据时,应该保证他们读写时的格式是一致的。由于CSV的表并没有索引,所以应该保证数据在innoDB的表中进行一般操作,而仅仅使用CSV表去进行导入或者导出。

Archive:这些紧凑的索引表用于存储和检索大量很少引用的历史,存档,或安全审计信息

BLACKHOLE:接收但不存储数据,类似于UNIX /dev/null设备。查询总是返回空集。这些表可以在主服务器上配置,用于复制DML语句发送到从服务器,但主服务器不保持其数据副本。

NDB(NDBCLUSTER):该数据库集群机特别适合于需要在正常运行时间提供高可用服务的环境。NDBCLUSTER在同时也提供了一个巨大的分布式快速的键值查找方案

Merge:使MySQL DBA或开发人员能够对一系列的MyISAM表进行逻辑分组并将它们作为一个对象引用。非常适合大型数据库,如:数据仓库中使用

Federated:提供连接独立的MySQL服务器从多个物理服务器创建一个逻辑数据库的能力。非常好的分布式或数据集群环境。

example:这个引擎作为MySQL源代码的一个例子,说明如何开始编写新的存储引擎。它主要是满足开发商的兴趣。存储引擎是一个“存根”,什么也不做。您可以使用此引擎创建表,但没有数据可以存储在其中或从它们中检索。

2.3.2,功能(部分)

功能

MyIsam

Memory

InnoDB

Archive

NDB

存储限制

256TB

RAM

64TB

None

384EB

事务

No

No

Yes

No

yes

锁粒度

表级

表级

行级

行级

行级

多版本并发控制

No

No

Yes

No

no

支持地理空间数据

Yes

No

Yes

Yes

Yes

支持空间索引

Yes

No

Yes(5.7.5-)

No

No

B_tree索引

Yes

Yes

Yes

No

No

T_tree索引

No

No

No

No

Yes

Hash索引

No

Yes

No(使用InnoDB内部的hash索引功能)

No

Yes

全文索引

Yes

No

Yes(5.6.4-)

No

No

聚合索引

No

No

Yes

No

No

数据缓存

No

N/A

Yes

No

Yes

索引缓存

Yes

N/A

Yes

No

Yes

数据压缩

Yes(limit:compressed row format)

No

Yes(limit: Barracuda file format)

Yes

No

数据加密

Yes

Yes

Yes

Yes

Yes

支持集群

No

No

No

No

Yes

备份、快照服务

Yes

查询缓存

数据字典更新

三、总结

每种存储引擎都有其自己的特点和支持的功能,但是,值得注意的是,在一个数据库中,不必全都使用同一种引擎,而可以根据需要,为某一张表指定合适的存储引擎。

一般在创建表的时候会指定引擎,如果没有,则使用默认的:

CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), Cost INTEGER) ENGINE='MyISAM';

当需要修改存储引擎的时候:

ALTER TABLE Cars ENGINE='InnoDB';

当需要查询一张表所使用的引擎时:

SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydb' AND TABLE_NAME='Cars';

后记:姑娘,InnoDB是无法实现集群的,你知道了没?

从各个情况来看,我们项目里面常用的引擎,是这三种:NDB(集群)、MyISAM(快速读,读写分离时)、InnoDB(支持事务,行级锁)

MySQL可供选择的存储引擎的更多相关文章

  1. MySQL学习笔记(四):存储引擎的选择

    一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...

  2. 《MySQL技术内幕:InnoDB存储引擎(第2版)》书摘

    MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子中使用了mysqld_safe命令来启动数据库,当然启动MySQL实例的方 ...

  3. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  4. [MySQL Reference Manual]15. 其他存储引擎

    15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...

  5. MySQL 远程连接(federated存储引擎)

    标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...

  6. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  7. MySQL(11):存储引擎

    1.存储引擎是什么?       MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择 ...

  8. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储引擎决定了 ...

  9. 数据库 MySQL 之 表操作、存储引擎

    数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名(     字段名1 ...

随机推荐

  1. (一)我的Javascript系列:Javascript的面向对象旅程(上)

    今宵酒醒何处,杨柳岸,晓风残月 导引 我的JavaScript系列文章是我自己对JavaScript语言的感悟所撰写的系列文章.现在还没有写完.目前一共出了下面的系列: (三)我的JavaScript ...

  2. Java 方法重载与引用数组类型

    1.方法重载  1)方法的签名 方法的签名包含方法名和参数列表 一个类中,不可以有两个方法的签名完全相同,即一个类中不能有两个方法的方法名和参数列表都一样. public class Test{ pu ...

  3. unity热更新方案对比

    Unity应用的iOS热更新 •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对Unity 应用进行热更新 •  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...

  4. 【转】OS X 中快速调出终端

    作者:Frank Pu链接:https://www.zhihu.com/question/20692634/answer/37152883来源:知乎著作权归作者所有,转载请联系作者获得授权. 来至 M ...

  5. C#4.0中的dynamic关键字和ExpandoObject对象

    dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...

  6. lua 使用正则表达式分割字符串

    function string_split(str, delimiter) if str == nil or str == '' or delimiter == nil then  return ni ...

  7. 【贪心 计数 倍增】bzoj4458: GTY的OJ

    倍增写挂调了半个晚上 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录 ...

  8. 转 Hystrix入门指南 Introduction

    https://www.cnblogs.com/gaoyanqing/p/7470085.html

  9. 12Vim在系统配置中的应用示例

    Vim 在系统配置中的应用示例 1. 配置主机名称 为了便于咱局域网中查找某台特定的主机,后者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机名之间可以通过这个类似于域名的名称来相互 ...

  10. token验证机制

    最近在vue-cli项目实现登录的过程中用到了token验证,在此总结如下 1. 登录时,客户端通过用户名与密码请求登录 2. 服务端收到请求去验证用户名与密码 3. 验证通过,服务端会签发一个Tok ...