MySQL数据引擎
InnoDB存储引擎
该引擎是MySQL数据库的默认事务型引擎,它被设计用来处理大量短期事务(绝大多数正常提交,很少回滚)
InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成,在MySQL4.1之后的版本中,InnoDB可以将每个表的数据和索引存放在单独的文件中。InnoDB也可以使用裸设备作为表空间的存储介质(现在已无必要)。InnoDB采用MVCC来支持高并发,并实现了其中的四个隔离级别,默认级别为可重复读,并通过间隙锁策略来防止幻读的出现。间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。InnoDB表是基于聚簇索引建立的,InnoDB的索引结构和MySQL的其他存储引擎有非常大的不同,聚簇索引对主键查询有非常高的性能。不过它的二级索引中必须包含主键列,所以如果主键列非常大的话,其他的索引都会很大。(表上的索引如果特别多的话,主键列应当尽可能的小)。InnoDB的数据存储格式是平台独立的。
InnoDB内部已经做了许多的优化,包括从磁盘读取数据时候采用的可预测性读,能够自动在内存中建立hash索引以加速读操作,加速插入操作的插入缓冲区等。作为事务型存储引擎,InnoDB通过一些机制和工具支持真正的热备份,MySQL的其他存储引擎不支持热备份。
MyISAM存储引擎
MySQL5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS),但MyISAM不支持事务和行级锁,并且崩溃后无法安全恢复。
MyISAM会将表存储在两个文件中:数据文件(.MYD)和索引文件(.MYI)。
MyISAM对整张表加锁,而不是针对行。读取时间会对需要读到的所有表加共享锁,写入时则对表加排它锁。但是在表有读取查询的同时,也可以往表中插入新的记录(并发插入)。对于MyISAM表,MySQL可以手工或者自动执行检查和修复操作。执行表的修复可能导致一些数据的丢失,而且修复速度是非常慢的。 对于MyISAM表,即使是BLOB和TEXT这种长字段,也可以基于前500个字符创建索引。创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立即写回到磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘。
如果表在创建并导入数据之后,不会再进行修改操作,那么这样的表或许适合采用MyISAM压缩表。压缩表是不能进行修改的(除非解压修改再压缩)。压缩表可以极大减少磁盘空间的占用,因此也可以减少磁盘I/O,从而提升查询性能。压缩表也同样支持索引,但索引也只能是只读的。
MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下性能良好。MyISAM有一些服务器级别的性能扩展限制。
Archive引擎
该引擎只支持Insert和Select操作,Archive引擎会缓存所有的写并利用zlib对插入的数据进行压缩,所以比MyISAM表的磁盘I/O更少,但是每次Select都需要执行全表扫描。(适合数据采集以及日志)
Archive引擎支持行级锁和专用的缓冲区,可以实现高并发插入。
Blackhole引擎
该引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存,但服务器会记录Blackhole表的日志,所以可以用于复制数据到备份数据库。
CSV引擎
可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。CSV引擎可以在数据库运行时拷入或者拷出文件。CSV引擎作为一种数据交换的机制,非常有用。
Federated引擎
该引擎是访问其他MySQL服务器的一个代理,它会创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。
Memory引擎
如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么可以使用Memory表。所有的数据都可以存储在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但是数据会丢失。
Memory表支持Hash索引,因此查找操作非常快。Memory是表级锁,因此并发写入的性能比较低,不支持BLOB或者TEXT类型的列,并且每一行的长度是固定的,因此可能导致内存浪费。
如果MySQL在执行查询的过程中需要使用临时表来存储中间结果,内部使用的临时表就是Memory表。如果中间结果太大超过了Memory表的限制,或者含有BLOB或者TEXT字段,则临时表会转换成MyISAM表。
Merge引擎
该引擎是MyISAM引擎的一个变种,由多个MyISAM表合并而来的虚拟表。
NDB集群引擎
MySQL集群使用的引擎。
选择合适的引擎
除非需要用到某些InnoDB不具备的特性,并且没有其他的办法可以替代,否则都应该优先选择InnoDB引擎。
事务 如果应用需要事务的支持,那么InnoDB是目前最好的选择,如果不需要事务,并且主要的是Insert和Select的话,那么MyISAM是不错的选择。
备份 如果可以定期地关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线热备份,那么选择InnoDB就是基本的要求。
崩溃恢复 数据量比较大的时候,系统崩溃后如何快速地恢复是一个需要考虑的问题。
特有的特性 有些应用可能依赖一些存储引擎所独有的特性或者优化。
MySQL数据引擎的更多相关文章
- 修改mysql数据引擎的方法- 提高数据库性能
前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...
- mysql数据引擎的概念介绍
什么是数据库引擎?每种数据库的数据格式,内部实现机制都是不同的,要利用一种开发工具访问一种数据库,就必须通过一种中介程序,这种开发工具与数据库之间的中介程序就叫数据库引擎. 如果你是个赛车手并且按一下 ...
- Mysql数据引擎和系统库
系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL ...
- MySQL数据引擎InnoDB和MyISAM互相转换
MySQL(或者社区开源fork的MariaDB)5.5以上支持InnoDB引擎,并将其作为默认数据库引擎.InnoDB带来很多改进,但是对系统资源占用明显增加,对于还在128MB-512MB内存VP ...
- mysql 数据库引擎
一.数据库引擎 数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或 ...
- MySQL数据库引擎类别和更换方式
MySQL数据库引擎类别 能用的数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEA ...
- MySql中启用InnoDB数据引擎的方法
1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理
重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...
- MySQL的数据引擎讲解
一.MySQL的数据引擎讲解 在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM. 1.简单介绍这两种引擎,以及该如何去选择. a.Innodb引擎,Innodb引擎提供了对数据 ...
随机推荐
- curl -windows下接口通讯
1,下载curl -----url命令传输工具 2,配置curl环境变量 3,在cmd环境中使用 举例:curl -G http://xxxxxxx.com?+参数 使用:curl -G &quo ...
- 20 Zabbix系统性能优化建议
点击返回:自学Zabbix之路 20 Zabbix系统性能优化建议 1. Zabbix性能变慢的可能表现: zabbix队列有太多被延迟的item,可以通过administration-queue查看 ...
- 【二分图】P3386洛谷模板
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- 使用GitHub+hexo搭建个人独立博客
前言 使用github pages服务搭建博客的好处有: 全是静态文件,访问速度快: 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台: 可以随意绑定自己的域名,不仔细看的话 ...
- web服务器,应用程序服务器,http服务器的区别
WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器? 这个概念很重要. Web服务器的基本功能就是提供We ...
- 微信公众号问题:{"errcode":40125,"errmsg":"invalid appsecret, view more at http:\/\/t.cn\/LOEdzVq, hints: [ req_id: kL8J90219sg58 ]"}
在调试微信公众号授权登录时遇到了这个错误,着实是心烦了半天,公众号相关开发以前是经常做的,很久没有接触了,而且遇到了这么个以前没遇到的问题. {"errcode":40125,&q ...
- java保留两位小数(不四舍五入)
import java.text.DecimalFormat; import java.math.RoundingMode; class Text{ public static void main(S ...
- msfvenom向apk注入payload
首先安装apt-get install apkinjector 这个东西,msfvenom重新组装apk的时候会自动调用 msfvenom -x /路径/apk android/meterpreter ...
- [bzoj1301] [LLH邀请赛]参观路线
本题同bzoj1098 用个并查集,把连续的被访问过的点并起来..这样就不会尝试已经走过的点了. #include<cstdio> #include<iostream> #in ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 用线段树维护区间连通性,对于每一个区间记录6个域表示(左上,左下)(左上,右上)(右上, ...