备注:以下关于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. SharePoint运行状况分析器有关磁盘空间不足的警告

    对于负责管理SharePoint内部部署安装的SharePoint管理员,SharePoint Health Analyzer是一款出色的工具.此功能不仅有助于解决服务器故障和服务失败的问题,还提供了 ...

  2. [dp uestc oj] G - 邱老师玩游戏

    G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  3. [opencv] applyColorMap

    applyColorMap 功能 转化为热力图,因为热力图我们看的变化更加细微,在很多地方都用到了热力图. 最近在看CAM,所以记一记这个函数. 感觉还是很有用的. 代码 >>> i ...

  4. 什么样子的WordPress网站更受搜索引擎欢迎

    网站的导航功能对于搜索引擎而言是非常重要的 网站的导航功能对于帮助用户迅速找到他们想要的内容来说是很重要的.它对帮助搜索引擎理解该网站有哪些重要内容同样非常重要.虽然百度的搜索结果都是指向每一个特定的 ...

  5. android上部署tensorflow

    https://www.jianshu.com/p/ddeb0400452f 按照这个博客就可以 https://github.com/CrystalChen1017/TSFOnAndroid 这个博 ...

  6. 总结一下自己脑海里的JavaScript吧(一)--DOM模型

    今天是2019年6月25日,闲来无事,写一篇文章来看看自己脑袋里装了多少JavaScript知识! 这儿就第一章: 说起JavaScript,它是什么?后端脚本语言?前端编程语言?还是在网站浏览器上运 ...

  7. angular设置反向代理

    本地调试,需要用到服务器的api,发现chrome安全问题,需要解决跨域问题.现给出解决方案: 1.增加proxy.conf.json文件 位置与package.json文件同级(可指定) 2.pac ...

  8. iOS动画之iOS UIBezierPath类 介绍

    感谢:http://blog.csdn.net/crayondeng/article/details/11093689 使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类 ...

  9. Android读书笔记三

    通过一章的学习体会到Git的重要性,因为想要获取开源的源代码,必须要使用Git,而且Linux内核完全是由Git管理的.Git是对源代码进行管理,在使用之前需要先安装,命令是 (1)apt-get i ...

  10. ubuntu安装easygui模块

    使用pip安装easygui 如果未安装pip,则使用如下命令 sudo apt-get install python-pip 安装完pip后,使用如下命令安装easygui sudo pip ins ...