加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

如何选择MySQL存储引擎

发布时间:2017-06-16 20:31:57 所属栏目:编程 来源:站长网
导读:一、MySQL的存储引擎 完备的引擎声名照旧看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里先容一些首要的引擎 1、InnoDB存储引擎 InnoDB是MySQL的默认事宜型引擎,它被计划用来处理赏罚大量的短期(short-lived)事宜。除非有很是

一、MySQL的存储引擎

完备的引擎声名照旧看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html

这里先容一些首要的引擎

1、InnoDB存储引擎

InnoDB是MySQL的默认事宜型引擎,它被计划用来处理赏罚大量的短期(short-lived)事宜。除非有很是出格的缘故起因必要行使其他的存储引擎,不然应该优先思量InnoDB引擎。

提议行使MySQL5.5及往后的版本,由于这个版本及往后的版本的InnoDB引擎机能更好。

MySQL4.1往后的版本中,InnoDB可以将每个表的数据和索引存放在单独的文件中。这样在复制备份瓦解规复等操纵中有明明上风。可以通过在my.cnf中增进innodb_file_per_table来开启这个成果。如下:

Cnf代码

[mysqld]

innodb_file_per_table

InnoDB回收MVCC来支持高并发,而且实现了四个尺度的断绝级别。其默认级别是REPEATABLE READ(可一再读),而且通过间隙锁(next-key locking)计策防备幻读的呈现。(事宜和事宜断绝级别是另一个大标题,各自网补吧)。

InnoDB是基于聚簇索引成立的,聚簇索引对主键查询有很高的机能。不外它的二级索引(secondary index,非主键索引)中必需包括主键列,以是假如主键列很大的话,其他的全部索引城市很大。因此表上的索引较多的话,主键该当尽也许的小。

InnoDB的存储名目是平台独立的,可以将数据和索引文件从Intel平台复制到Sun SPARC平台或其他平台。

InnoDB通过一些机制和器材支持真正的热备份,MySQL的其他存储引擎不支持热备份。

2、MyISAM存储引擎

MyISAM提供了大量的特征,包罗全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事宜和行级锁,有一个毫无疑问的缺陷就是瓦解后无法安详规复。

MyISAM会将表存储在两个文件在中:数据文件和索引文件,别离是.MYD和.MYI为扩展名。

在MySQL5.0早年,只能处理赏罚4G的数据,5.0中可以处理赏罚256T的数据。

在数据不再举办修改操纵时,可以对MyISAM表举办压缩,压缩后可以进步读手段,缘故起因是镌汰了磁盘I/O。

3、Archive引擎

Archive存储引擎只支持INSERT和SELECT操纵,在MySQL5.1之前不支持索引。

Archive表得当日记和数据收罗类应用。

Archive引擎支持行级锁和专用的缓存区,以是可以实现高并发的插入,但它不是一个事物型的引擎,而是一个针对高速插入和压缩做了优化的简朴引擎。

4、Blackhole引擎

Blackhole引擎没有实现任何存储机制,它会扬弃全部插入的数据,不做任何生涯。但处事器会记录Blackhole表的日记,以是可以用于复制数据到备库,可能简朴地记录到日记。但这种应用方法会遇到许多题目,因此并不保举。

5、CSV引擎

CSV引擎可以将平凡的SCV文件作为MySQL的表来处理赏罚,但不支持索引。

CSV引擎可以作为一种数据互换的机制,很是有效。

6、Federated引擎

Federated引擎是会见其他MySQL处事器的一个署理,尽量该引擎看起来提供了一种很好的跨处事器的机动性,但也常常带来题目,因此默认是禁用的。

7、Memory引擎

假如必要快速地会见数据,而且这些数据不会被修改,重启往后丢失也没有相关,那么行使Memory表长短常有效。Memory表至少比MyISAM表要快一个数目级。

Memory表是表级锁,因此并发写入的机能较低。它不支持BLOB或TEXT范例的列,而且每行的长度是牢靠的,这也许凝滞部门内存的挥霍。

姑且表和Memory表不是一回事。姑且表是指行使CREATE TEMPORARY TABLE语句建设的表,它可以行使任何存储引擎,只在单个毗连中可见,当毗连断开时,姑且表也将不复存在。

8、NDB集群引擎

MySQL处事器、NDB集群存储引擎,以及漫衍式的、share-nothing的、容灾的、高可用的NDB数据库的组合,被称为MySQL集群(MySQL Cluster)。

其他第三方或社区引擎

XtraDB:是InnoDB的一个改造版本,可以作为InnoDB的一个美满的更换产物。

TokuDB:行使了一种新的叫做分形树(Fractal Trees)的索引数据布局。

Infobright:是最著名的面向列的存储引擎。

Groonga:是一款全文索引引擎。

OQGraph:该引擎由Open Query研发,支持图操纵(好比查找两点之间的最短路径)。

Q4M:该引擎在MySQL内部实现了行列操纵。

SphinxSE:该引擎为Sphinx全文索引搜刮处事器提供了SQL接口。

二、选择吻合的引擎

大部门环境下,InnoDB都是正确的选择,可以简朴地归纳为一句话“除非必要用到某些InnoDB不具备的特征,而且没有其他步伐可以更换,不然都应该优先选择InnoDB引擎”。

除非万不得已,不然提议不要殽杂行使多种存储引擎,不然也许带来一系列认真的题目,以及一些隐藏的bug和界线题目。

假如应用必要差异的存储引擎,请先思量以下几个身分:

事宜:

假如应用必要事宜支持,那么InnoDB(可能XtraDB)是今朝最不变而且颠末验证的选择。

备份:

假如可以按期地封锁处事器来执行备份,那么备份的身分可以忽略。反之,假如必要在线热备份,那么选择InnoDB就是根基的要求。

瓦解规复

MyISAM瓦解后产生破坏的概率比InnoDB要高许多,并且规复速率也要慢。

特有的特征

假如一个存储引擎拥有一些要害的特征,同时却又缺乏一些须要的特征,那么偶然辰不得不做折中的思量,可能在架构计划上做一些弃取。

有些查询SQL在差异的引擎上示意差异。较量典范的是:

SELECT COUNT(*) FROM table;

对付MyISAM确实会很快,但其他的也许都不可。

三、应用举例

1、日记型应用

MyISAM可能Archive存储引擎对这类应用较量吻合,由于他们开销低,并且插入速率很是快。

假如必要对记录的日记做说明报表,天生报表的SQL很也许会导致插入服从明明低落,这时辰该怎么办?

一种办理要领,是操作MySQL内置的复制方案将数据复制一份到备库,然后在备库上执行较量耗损时刻和CPU的查询。虽然也可以在体系负载较低的时辰执行报表查询操纵,但应用在不绝变革,假如依烂魅这个计策也许往后会导致题目。

另一种要领,在日记记录表的名字中包括年和月的信息,这样可以在已经没有插入操纵的汗青表上做频仍的查询操纵,而不会滋扰到最新的当前表上的插入操纵。

2、只读可能大部门环境下只读的表

有些表的数据用于体例类目可能排列清单(如事变岗亭),这种应用场景是典范的读多写少的营业。假如不介怀MyISAM的瓦解规复题目,选用MyISAM引擎是吻合的。(MyISAM只将数据写到内存中,然后守候操纵体系按期将数据刷出到磁盘上)

3、订单处理赏罚

涉及订单处理赏罚,支持事宜是须要的,InnoDB是订单处理赏罚类应用的最佳选择。

4、大数据量

假如数据增添到10TB以上的级别,也许必要成立数据客栈。Infobright是MySQL数据客栈最乐成的方案。也有一些大数据库不得当Infobright,却也许得当TokuDB。

下面是常用存储引擎的合用情形:

MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用情形下最常行使的存储引擎之一

InnoDB:用于事宜处理赏罚应用措施,具有浩瀚特征,包罗ACID事宜支持。

Memory:将全部数据生涯在RAM中,在必要快速查找引用和其他相同数据的情形下,可提供极快的会见。

Merge:应承MySQL DBA或开拓职员将一系列等同的MyISAM表以逻辑方法组合在一路,并作为1个工具引用它们。对付诸如数据仓储等VLDB情形异常得当。

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读