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引擎提供了对数据 ...
随机推荐
- Java贪吃蛇感想
暑假敲代码的效率真的不高呀,一个这种小游戏从最开始构思到最后实施代码,从最开始的Demo版本到最后的第四版本,花了一个星期了.本想再更新一个版本,加入双人对战模式,还想写个AI版,可是我估计按照现在我 ...
- JS中将一个值转换为字符串的3种方法
1.value.toString() 2."" + value 3.String(value) 第一种方法存在的问题是,它不能把null和undefined转换为字符串.还有第二种 ...
- vue2.0 正确理解Vue.nextTick()的用途
什么是Vue.nextTick() 官方文档解释如下: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 获取更新后的DOM,言外之意就是DOM更新 ...
- socket之解决粘包方法
low方法 import socket,subprocess ip_port=('127.0.0.1',8080) s=socket.socket(socket.AF_INET,socket.SOCK ...
- u3d开发中可能会遇到的设计模式
最近一段时间,面试了一些程序员,当然主要招聘的岗位是Unity3D开发.面试过程中对于三年以上的程序员我都会问其在开发中是否会总结一些常用的设计模式和设计方法,当然目的只是想了解程序员的自我学习情况以 ...
- 【CentOS】阿里云CentOS安装php环境
本文在介绍安装php环境前,已安装了nginx.mysql. 一.安装 使用国内的搜狐镜像站下载php5.6安装包,执行: wget http://mirrors.sohu.com/php/php- ...
- IdentityServer Topics(1)- 启动说明
启动 IdentityServer的启动是中间件和服务的组合来实现的. 所有配置都在你的启动类(Startup.cs)中完成. 配置服务 通过以下方式调用将IdentityServer服务添加到DI系 ...
- form表单转换为Json数据
最近对前端js学习有点多,如今想自己动手写点插件,后来发现,我想到的,其他人都想到了.于是做了以下笔记. 使用插件: 插件 :https://github.com/marioizquierdo/jqu ...
- motan负载均衡/zookeeper集群/zookeeper负载均衡的关系
motan/dubbo支持负载均衡.zookeeper有集群的概念.zookeeper似乎也能做负载均衡,这3者是什么关系呢? 3个概念:motan/dubbo负载均衡.zookeeper集群.zoo ...
- Java与算法之(13) - 二叉搜索树
查找是指在一批记录中找出满足指定条件的某一记录的过程,例如在数组{ 8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15 }中查找数字15,实现代码很简单 ...