mysql数据库各存储引擎比較
InnoDB存储引擎:
这种设备少了操作系统这一层。I/O效率更高。InnoDB还提供了插入缓冲(insert
buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
- 未提交读(Read uncommitted):在未提交读级别,事务中的改动,即使没有提交,对其它事务也都是可见的。事务能够读取未提交的数据,这也被称为脏读(Dirty
Read)。这个级别会导致非常多问题。从性能上来说,未提交读不会比其它的级别好太多,可是缺乏其它级别的非常多优点。在实际应用中一般非常少使用。 - 提交读(Read committed):大多数数据库系统的默认隔离级别都是提交读(但Mysql不是)。
提交读满足前面提到的隔离性的简单定义:一个事务開始时,仅仅能“看见”已经提交的事务所做的改动。
换句话说,一个事务从開始直到提交之前。所做的不论什么改动对其它事务都是不可见的。
这个级别有时候也叫做不可反复读(nonrepeatable
read),由于两次运行相同的查询。可能会得到不一样的结果。 - 可反复读(Repeatable read):可反复读攻克了脏读的问题。该级别保证了在同一个事务中多次读取相同记录的结果是一致的。
可是理论上。可反复读隔离级别还是无法解决另外一个幻读(Phantom
read)问题。所谓幻读。指的是当某个事务在读取某个范围内的记录时,另外一个事务中又在该范围插入了新的记录,当之前的事务再次读取该范围的记录时。会产生幻行(Phantom
row)。可反复读是MySQL的默认事务隔离级别。 - 可串行化(Serializable):可串行化是最高的隔离级别。
它通过强制事务串行运行,避免了前面所说的幻读问题。简单来说,可串行化会在读取的每一行数据上都加上锁,所以可能导致大量的超时和锁争用问题。实际应用中也非常少用到这个隔离级别。仅仅有在非常须要确保数据的一致性而且能够接受没有并发的情况下,才考虑用该级别。
对于表中的数据存储。InnoDB存储引擎採用了聚集的方式,因此每张表的存储都是按主键的顺序存储。假设没有显式的在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
Shared Everthting:通常是针对单个主机。全然透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer
Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac。 它是数据共享,可通过添加节点来提高并行处理的能力,扩展能力较好。其相似于SMP(对称多处理)模式。可是当存储器接口达到饱和的时候,添加节点并不能 获得更高的性能 。
Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源。相似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和hadoop ,各节点相互独立。各自处理自己的数据。处理后的结果可能向上层汇总或在节点间流转。
我们常说的 Sharding 事实上就是Share Nothing架构,它是把某个表从物理存储上被水平切割,并分配给多台server(或多个实例),每台server能够独立工作,具备共同的schema。比方MySQL
Proxy和Google的各种架构,仅仅需添加server数就能够添加处理能力和容量。
因此提供更高的可用性,NDB的特点是数据所有存放在内存中,因此主键查找的速度极快,而且通过加入NDB数据存储节点能够线性的提高数据库性能,是高可用的集群系统。
可是NDB存储引擎的链接操作是在mysql数据库层完毕的,而不是在存储引擎层完毕的,意味着复杂的连接操作须要巨大的网络开销。因此查询速度非常慢。
Memory存储引擎(之前称为heap存储引擎):
将表中的数据存放在内存中,假设数据库重新启动或者发生崩溃,表中的数据都将消失,非常适用于存储暂时数据的暂时表,默认使用哈希索引,而不是B+树索引。仅仅支持表锁。并发性能较差,而且存储变长字段(varchar)时是依照定常字段(char)的方式进行的。因此会浪费内存。
Archive存储引擎:
仅仅支持insert和select操作。从mysql5.1開始支持索引,非常适合存储归档数据,如日志信息,其设计目标是提供快速的插入和压缩功能。
Federated存储引擎:
存储引擎表并不存放数据。他仅仅是指向一台远程mysql数据库server上的表。仅仅支持mysql数据库表,不支持异构数据库表(异构数据库系统是相关的多个数据库系统的集合,能够实现数据的共享和透明訪问,每一个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DBMS。
)
Maria存储引擎:
设计目标是主要用来代替原有的mysql存储引擎,特点是支持缓存数据和索引文件,应用了行锁设计,提供了mvcc(多版本号并发控制)功能,支持事务和非事务安全的选项,以及更好的blob字符类型的处理性能,
在MySQL中有两个字段类型easy让人感觉混淆,那就是TEXT与BLOB。特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型。
以下给出几点差别:
一、主要差别
TEXT与BLOB的主要差别就是BLOB保存二进制数据。TEXT保存字符数据。眼下差点儿所有博客内容里的图片都不是以二进制存储在数据库的,而 是把图片上传到server然后正文里使用<img>标签引用,这种博客就能够使用TEXT类型。
而BLOB就能够把图片换算成二进制保存到数据 库中。
二、类型差别
BLOB有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们仅仅是可容纳值的最大长度不同。
TEXT也有4种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些类型同BLOB类型一样。有相同的最大长度和存储需求。
三、字符集
BLOB列没有字符集,而且排序和比較基于列值字节的数值值。TEXT列有一个字符集。而且依据字符集的校对规则对值进行排序和比較
四、大写和小写
在TEXT或BLOB列的存储或检索过程中。不存在大写和小写转换,都一样!
五、严格模式
运行在非严格模式时,假设你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值。值被截取以保证适合。
假设截掉的字符不是空格。将会产生一条警告。使用严格SQL模式,会产生错误。而且值将被拒绝而不是截取并给出警告。
六、其它
当保存或检索BLOB和TEXT列的值时不删除尾部空格。
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。
BLOB和TEXT列不能有默认值。
当排序时仅仅使用该列的前max_sort_length个字节。
max_sort_length的 默认值是1024。
当你想要使超过max_sort_length的字节有意义,对含长值的BLOB或TEXT列使用GROUP BY或ORDER BY的还有一种方式是将列值转换为固定长度的对象。
标准方法是使用SUBSTRING函数。
BLOB或TEXT对象的最大大小由其类型确定,但在client和server之间实际能够传递的最大值由可用内存数量和通信缓存区大小确定。
你能够通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同一时候改动server和client程序。
除了以上的存储引擎,mysql还有非常多其它的存储引擎。包含merge、csv、sphinx、infobright。他们都有各自的使用场所,
mysql数据库各存储引擎比較的更多相关文章
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
文/何登成 导读: 来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...
- MySQL数据库InnoDB存储引擎中的锁机制
MySQL数据库InnoDB存储引擎中的锁机制 http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...
- MySQL数据库InnoDB存储引擎
MySQL数据库InnoDB存储引擎Log漫游 http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/
- 查看和改动MySQL数据库表存储引擎
要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎: 1.查看数据库所能支持的存储引擎: ...
- MySQL数据库MyISAM存储引擎转为Innodb
MySQL数据库MyISAM存储引擎转为Innodb 之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...
- 百万年薪python之路 -- MySQL数据库之 存储引擎
MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 首先声明一点: 存储引擎这个概念只有MySQL才有. ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- mysql数据库之存储引擎
mysql存储引擎概述 什么是存储引擎? MYSQL中的数据用各不相同的技术 ...
- 关于MySql 数据库InnoDB存储引擎介绍
熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile.之后innod ...
随机推荐
- Stacked Autoencoders
转自:http://www.cnblogs.com/tornadomeet/archive/2013/03/25/2980357.html 如果使用多层神经网络的话,那么将可以得到对输入更复杂的函数表 ...
- PHP表单生成器,快速生成现代化的form表单,快速上手
form-builder PHP表单生成器,快速生成现代化的form表单.包含复选框.单选框.输入框.下拉选择框等元素以及省市区三级联动.时间选择.日期选择.颜色选择.树型.文件/图片上传等功能. 详 ...
- ThinkPad E431 获取无限网络的驱动
sudo apt-get install linux-headers-generic build-essential dkms sudo apt-get install linux-source ...
- 魔兽世界serverTrinitycore分析一:前言
一:简单介绍 项目地址:https://github.com/TrinityCore/TrinityCore 帖一段官网介绍吧 TrinityCore is a MMORPG Framework ba ...
- CSS3:元素的边框、背景和大小
边框 和边框相关的属性例如以下. border-width 用于设置边框的宽度,可选择包含: 1)<长度值>:将边框宽度设为以CSS度量单位(如em.px.cm)表达的长度值. 2)< ...
- vim-大小写装换
以下内容参考自 http://blog.csdn.net/yangzhongxuan/article/details/8484167 自己验证了效果 命令一:单个字符转换(光标所在位置的字母进行转换) ...
- @JSONField 注解说明
转自:https://blog.csdn.net/suyimin2010/article/details/80617538 导入@JSONField 注解: import com.alibaba.fa ...
- (转)Linux下使用rsync最快速删除海量文件的方法
转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...
- 【习题 7-6 UVA - 12113】Overlapping Squares
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先预处理出来一个正方形. 然后每次枚举新加的正方形左上角的坐标就可以. 注意覆盖的规则,控制一下就可以. 然后暴力判断是否相同. 暴 ...
- 洛谷——P1816 忠诚
https://www.luogu.org/problem/show?pid=1816#sub 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记 ...