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 ...
随机推荐
- BFC的布局规则和触发条件
1 .BFC的含义 : Block Formatting Contexts(BFC) 块级元素格式化上下 ...
- TensorFlow的学习
1.先判断python的版本(因为有些python版本自带pip,可以参考我写的对pip的认识的博客文章),选择是否安装pip,然后安装更新tensorflow如:sudo pip install - ...
- Linear Decoders
Sparse Autoencoder Recap In the sparse autoencoder, we had 3 layers of neurons: an input layer, a hi ...
- element-ui一些注意点:
1.change ($event,“你要传递的其他值”),使用el-select组件时,想传递多个值. 或者 在el-option上的value属性上传递对象 eg: :value="{'c ...
- 【Educational Codeforces Round 36 C】 Permute Digits
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] //从大到小枚举第i(1..len1)位 //剩余的数字从小到大排序. //看看组成的数字是不是小于等于b //如果是的话. //说 ...
- Effective C++ 条款43
学习处理模板化基类里的名称 本节作者编写的意图在我看来能够总结成一句话,就是"怎样定义并使用关于模板类的派生过程,怎样处理派生过程出现的编译不通过问题". 以下我们看一段说明性的代 ...
- Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用演示样例
MainActivity例如以下: package cc.vv; import java.util.concurrent.LinkedBlockingQueue; import java.util.c ...
- excel表如何实现多if选择结构多分支判断
excel表如何实现多if选择结构多分支判断 一.总结 一句话总结:把多if分支转换成单if分支相加. 也可以if分支,也可以lookup函数. 1.CHOICE: +2 if band A; +1 ...
- MFC ClistCtr锁定隐藏某一列
通过设置列的宽度为0, 可以隐藏列表框的某一列,但是用户通过拖动列表框的大小,隐藏的列,可能又被显示出来了. 我们可以自己写一个CListEx继承CListCtr,然后捕获拖动的消息,对该消息进行特殊 ...
- 洛谷 P4779【模板】单源最短路径(标准版)
洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ...