备注:以下关于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. 宿主机Windows访问虚拟机Linux文件(二)

    上一篇文章中详细讲述FTP服务(基于文件传输协议的服务),本文则介绍另一种能够实现此功能Telnet(Telecommunications network 远程登陆)服务.本文介绍的telnet我常用 ...

  2. js引入的数组 会被页面缓存,如需要被强制性不缓存,请用function return 就ok了

    js引入的数组 会被页面缓存,如需要被强制性不缓存,请用function return 就ok了

  3. Kafka 完全分布式集群环境搭建

    思路: 先在主机s1上安装配置,然后远程复制到其它两台主机s2.s3上, 并分别修改配置文件server.properties中的broker.id属性. 1. 搭建前准备 示例共三台主机,主机IP映 ...

  4. CORS的原理及应用

    CORS的原理及应用 CORS是跨站资源共享,同样是解决浏览器的同源策略 其本质是设置响应头,使得浏览器允许跨域请求. 第三方网站返回数据的时候在浏览器的响应头中添加允许的域名,允许所有的用* 1 简 ...

  5. SC || Chapter 3

    ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 基本数据类型 && 对象数据类型 基本数据类型(int char long) 在栈中分配内存,不可变 对象数据类型(String BigInt ...

  6. Redis五种数据结构解析

    Redis是一个开源的Key-Value存储引擎,它支持string.hash.list.set和sorted set等多种值类型.由于其卓越的性能表现.丰富的数据类型及稳定性,广泛用于各种需要k/v ...

  7. J.U.C知识点梳理

    java.util.concurrent : 提供了并发编程的解决方案 1.CAS 是java.util.concurrent.atomic包的基础 2.AQS是java.util.concurren ...

  8. javaweb基础(19)_jsp标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  9. java基础——反射机制

    反射机制是什么 反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  10. java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.

    需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...