MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。
MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。
MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,
这两个引擎也都被默认包含在MySQL中。
注释:MEMORY存储引擎正式地被确定为HEAP引擎。
InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,
你可以按照喜好通过配置MySQL来允许或禁止任一引擎。
EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在 MySQL源代码中的一个例子,
它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。
NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。
这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。
ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。 CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。
BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。
FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,
我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。
当你创建一个新表的时候,你可以通过添加一个ENGINE 或TYPE 选项到CREATE TABLE语句来告诉MySQL你要创建什么类型的表:
CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = MEMORY;
虽然TYPE仍然在MySQL 5.1中被支持,现在ENGINE是首选的术语。 如何选择最适合你的存储引擎呢?
InnoDB存储引擎
特点:
1,支持事务,主要面向在线事务处理(OLTP)方面的应用。
2,行锁设计,支持外键,并支持orcle的非锁定读,即默认情况下读取操作不加锁。
3,第三方存储引擎,被orcle收购。
4,windows版本默认存储引擎,其他系统mysql默认存储引擎为MyISAM。
设计理念:
1,InnoDB默认将数据放到一个逻辑的表空间中,这个表空间就像黑盒子一样由InnoDB自身进行管理。从mysql4.1开始,它可以将每个 InnoDB存储引擎的表单独存放到一个独立的ibd文件中。
与orcle类似,InnoDB存储引擎同样可以使用裸设备(row disk)来建立其表空间。
2,InnoDB通过使用多版本并发控制(MVCC)来获取高并发性,并且实现了sql标准的4种隔离级别,默认为REPEATABLE级别。
同时 使用一种next-key-locking的策略来避免幻读(phantom)。除此之外,InnoDB存储引擎还提供插入缓存(insert buffer),
二次写(double write),自适应哈希索引(adaptive hash index),预读(read ahead)等高性能和高可用的功能。
MyISAM存储引擎
特点:
1,不支持事务,表锁(表级锁,加锁会锁住整个表),支持全文索引,对于一些OLAP(online analytical processing,在线分析处理)操作速度快
2,官方存储引擎,除windows版本外,是所有mysql版本的默认存储引擎。
设计理念:
1,myisam存储引擎表由myd和myi组成。myd用来存放数据文件,myi用来存放索引文件,可以通过myisampack工具进一步压缩 数据文件,因为该工具使用huffman编码静态算法来压缩数据。
因此,使用该工具压缩后的表是只读的,当然也可以通过myisampack来解压数据文 件。
2,mysql5.0之前,myisam默认支持的表大小为4g,如果需要支持大于4g的myisam表时,则需要制定Max_Rows和AVG_ROW_LENGTH属性。
从mysql5.0版本开始,myisam默认支持256T的单表数据,足够满足一般应用的需求。
3,对于myisam存储引擎表,mysql数据库只缓存其索引文件,数据文件的缓存由操作系统本身来完成。这与其他使用LRU算法缓存数据的大部分数据库大不相同。
此外,在mysql5.1.23版本之前,无论是在32b或64b的操作系统环境中,缓存索引的缓存区最大只能设置为4g,在之后的版 本中,64位系统可以支持大于4g的索引缓存区。
NDB存储引擎
NDB存储引擎是一个集群存储引擎,类似于orcle的rac集群,不过与rac share everything结构不同的是,其结构是share nothing的集群结构,因此能提供更高级别的高可用性。
特点:
1,数据全部放在内存中,从5.1版本开始,可以将非索引数据放在磁盘上,因此主键查找的速度极快,并且通过添加ndb数据存储引擎节点(Data Node)可以线性地提高数据库性能,
是高可用,高性能的集群系统。
2,ndb存储引擎的连接操作(join)是在mysql数据库层完成的,而不是在存储引擎层完成的,这意味着复杂的连接操作需要巨大的网络开销,因此,查询速度很慢,这是ndb的瓶颈。
Memory存储引擎
memory存储引擎(之前称为heap存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都会消失。它非常适合用于存放临时数据的临时表,以及数据仓库的纬度表,默认使用哈希索引,而不是b+树索引。
使用限制:memory存储引擎只支持表锁,并发性能较差,并且不支持text和blob列类型。最重要的是,存放变长字段(varchar)时, 按照定常字段的方式进行存放,造成内存浪费。
此外,mysql数据库使用临时表存放查询的中间结果集(intermediate result)。如果中间结果集大于memory存储引擎表的容量设置,或中间结果集含有text或blob字段,则mysql数据库会把其转换到 myisam存储引擎表而存放到磁盘。
由于myisam不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。
Archive存储引擎
特点:
1,archive存储引擎只支持insert和select操作,mysql5.1开始支持索引。使用zlib算法将数据行进行压缩后存储,压缩比率一般可达1:10
2,archive存储引擎非常适用于存储归档数据,如日志信息。
3,archive存储引擎使用行锁来实现高并发的插入操作。由于本身不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
Maria存储引擎
maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的myisam存储引擎,从而成为mysql的默认存储引擎。
特点:
1,缓存数据和索引文件,行锁设计,提供mvcc功能,支持事务和非事务安全的选项支持,及更好的blob字段类型的处理性能。
MySQL支持多种存储引擎的更多相关文章
- mysql中有多种存储引擎,每种引擎都有自己的特色
mysql中有多种存储引擎,每种引擎都有自己的特色. 用途: MyISAM:快读, Memory:内存数据, InnoDB:完整的事务支持 锁: MyISAM:全表锁定, Memory:全表锁定, I ...
- 查看mysql支持的存储引擎
查看mysql支持的存储引擎 show engines\G;
- mysql支持的存储引擎
1.InnoDB 存储引擎 支持事务,其设计目标主要面向联机事务处理(OLTP)的应用.其特点是行锁设计.支持外键,并支持类似 Oracle 的非锁定读,即默认读取操作不会产生锁. 从 MySQL 5 ...
- 百万年薪python之路 -- MySQL数据库之 存储引擎
MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 首先声明一点: 存储引擎这个概念只有MySQL才有. ...
- MySQL的多存储引擎架构
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...
- Mysql表类型(存储引擎)的比较
面试官问:你知道mysql有哪些存储引擎,区别是啥? 我:一脸闷逼,于是乎下来补一补,以作备查 1.和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎. ...
- (转)MySQL 常用数据存储引擎区别
MySQL 常用数据存储引擎区别 原文:https://laravel-china.org/articles/4198/mysql-common-data-storage-engine mysql有多 ...
- MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)
1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- mysql三-1:存储引擎
一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型 ...
随机推荐
- Android-Native-Server 启动和注册详细分析
Android-Native-Server 启动和注册详细分析 以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的 main()函数 源码位置E:\ ...
- 你所不知道的五件事情--java.util.concurrent(第二部分)
这是Ted Neward在IBM developerWorks中5 things系列文章中的一篇,仍然讲述了关于Java并发集合API的一些应用窍门,值得大家学习.(2010.06.17最后更新) 摘 ...
- (二) win8+XAML Binding(数据绑定)
第一次接触Binding是用到listview的时候,ListView中如果要动态显示一些内容,我一开始想的就是动态生成一个item,然后插入... 其实用Binding就不用在代码中涉及listvi ...
- 发布maven的web项目,tomcat显示已启动,但是访问出错
sts中如果是maven的web工程,一定要先进行maven install,再发布工程,否则不会出任何错误,tomcat还访问不了
- ios之runtime学习
今天学习了一下ios的runtime,看了其他博主的博客写的很不错,自己就不班门弄斧了,仅在此转载: 1.关于oc中类和元类:http://husbandman.diandian.com/post/2 ...
- [置顶] [BZOJ]2127: happiness 最小割
happiness: Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己 ...
- linux中文设置
近期出现用户发邮件乱码问题,前面服务器刚刚切换过来,忘了装中文字体了. 本地调试在windows环境下,所以每次看都好的,于是我看了下linux服务器的编码,果然默认的不是中文字体,所以在生成pdf的 ...
- cocos2d-x Action
转自:http://codingnow.cn/cocos2d-x/775.html 从结构图可以看出,动作类的基类是CCAction,通过继承它可以实现很多种动作. CCFiniteTimeActio ...
- Java获取时间与系统时间相差8小时终极解决方案
一.在取日期以前设置一下时区 TimeZone tz = TimeZone.getTimeZone(“ETC/GMT-8″);TimeZone.setDefault(tz); 此种方法适用于单次快速获 ...
- HubbleDotNet 学习之路
1.创建后台任务实现自动同步更新表数据.打开工具后点击“management”选项卡,选择“task scheduler management”,在弹出的窗口中点击右侧的"add" ...