MySQL可供选择的存储引擎
备注:以下关于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可供选择的存储引擎的更多相关文章
- MySQL学习笔记(四):存储引擎的选择
一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...
- 《MySQL技术内幕:InnoDB存储引擎(第2版)》书摘
MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子中使用了mysqld_safe命令来启动数据库,当然启动MySQL实例的方 ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- [MySQL Reference Manual]15. 其他存储引擎
15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...
- MySQL 远程连接(federated存储引擎)
标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
- MySQL(11):存储引擎
1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择 ...
- MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储引擎决定了 ...
- 数据库 MySQL 之 表操作、存储引擎
数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名( 字段名1 ...
随机推荐
- sshd_config配置注释
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide c ...
- 将一个字符与对应Ascii码互转
package nicetime.com.practies; /** * Java中将一个字符与对应Ascii码互转 1 byte = 8bit 可以表示 0-127 */public class G ...
- jsHint-静态代码检查工具eclipse中使用
今天介绍一个关于js静态代码的检查工具,此工具可以帮助更好的规范代码的编写形式以及检查错误.由于jslint的分支jsHint有跟多的配置项相对使用也比较方便,依次本文主要介绍jsHint的使用方式. ...
- NVM for Windows下载与安装
下载NVM for Windows https://github.com/coreybutler/nvm-windows/releases nvm-noinstall.zip: 这个是绿色免安装版本, ...
- 【TensorFlow入门完全指南】神经网络篇·MLP多层感知机
前面的不做过多解释了. 这里定义了两个占位符,各位也知道,在训练时,feed_dict会填充它们. 定义相关网络. 这里是权值矩阵和偏差. 这里是实例化了网络,定义了优化器和损失,和上一篇一样. 最后 ...
- Bot Framework:Activity类简明指南
Bot Framework相关文档:https://docs.botframework.com/en-us/csharp/builder/sdkreference/attachments.html B ...
- asp页面无法访问,可尝试开始SQL Server等服务
存在问题 asp页面的英文提示,翻译后为: "一个错误发生在服务器在处理URL.请联系系统管理员(管理人).如果您是系统管理员,请点击这里了解更多关于这个错误." 解决方案 请 ...
- windows7桌面小工具打不开的解决方案
将任务管理器中的sidebar.exe结束任务: 将C:\Users\用户名\AppData\Local\Microsoft\Windows Sidebar下的settings.ini的文件名修改为任 ...
- Nuget~管理自己的包包
很久很久以前,自己就想有个包包,最近又从网上淘了一个,价格不便宜呢,99块,还是个小腰包,不过作工还算精良,我喜欢的类型,帆布休闲包,可以将我的手机,耳机,水,小烟,小酒,小伞都放里,方便至极,哈哈!
- [论文理解] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Intro MobileNet 我 ...