我们知道MySQL最大的特色是其可插拔的插件式存储引擎,本文将介绍目前市面上主流的存储引擎。这里要特别提一 点:由于MySQL是开源的,所以如果你对某些存储引擎不满意,可以修改或写一个存储引擎,增加自己想要的特性(据我 所知,国内比较知名的有网易的TNT引擎),这也是MySQL作为开源数据库的魅力之一。
有些人刚接触MySQL的时候可能会有些惊讶,竟然有不支持事务的存储引擎,因为学过关系型数据库理论的人都知道 ,事务是关系型数据库的核心。但是在现实应用中(特别是互联网),为了提高性能,在某些场景下可以摈弃事务。
InnoDB
InnoDB是MySQL使用率最高的存储引擎,目前市面上至少95%的MySQL采用该存储引擎,因此从MySQL5.5开始 ,它替代MyISAM成为默认的存储引擎。它有如下几个特点:
1)支持事务:采用MVCC(多版本并发控制)来支持高并 发,实现了四个ANSI标准的隔离级别,默认为Repeatable Read,并且通过间隙锁(next-key lock)防止幻读。
2) InnoDB的表是基于聚簇索引,对主键查询有很高的性能,但它的二级索引必须包含主键列。
3)支持热备份:Oracle 提供的MySQL Enterprise Backup和Percona提供的开源的XtraBackup都可以实现热备
4)支持行级锁
MyISAM
1) 不支持行级锁,也就是说任何操作都对整张表加锁。
2)不支持事务,无法回滚,崩溃后无法安全恢复。
3)支持 全文索引、压缩、空间函数等
MyISAM设计简单,数据以紧密格式存储,在某些场景下性能很好,但 它最典型的问题 还是表锁。
Archive
是一个针对高速插入和压缩做了优化的简单引擎,只支持insert和select操作,每次select都 是全表扫描,适合日志和数据采集应用。
CSV
可以将普通的csv文件作为MySQL的表处理,可以将excel的数据存储 为csv格式文件,然后复制到MySQL的数据目录下,就能在MySQL中以表的方式打开,因此CSV引擎作为一种数据交换机制 ,非常有用。
Memory
所有的数据都保持在内存中,重启后数据会丢失。Memory表是表级锁,因此写性能较低,但 它的查询性能非常高,支持Hash索引。
NDB集群
MySQL服务器、NDB集群存储引擎,以及分布式的、share-nothing的、容灾的、高可用的NDB数据库组合成为MySQL集 群。
以上介绍的都是MySQL内建的存储引擎,以下是第三方的存储引擎。
XtraDB、PBXT
是Percona公司基于InnoDB的一个改进版本
TokuDB
一种大数据的存储引擎。
RethinkDB
为固态存储SSD设 计。
Infobright
面向列的存储引擎,为数据分析和数据仓库设计。
如何选择合适的存储引擎?
准则1:除非需要用到InnoDB没有的特性,否则都应该优先选择InnoDB引擎。
准则2 :不要混合使用多种存储引擎。
改变表的存储引擎
有三种方法可以改变表的存储引擎,最常见的一种是:
alter table mytbl engine = InnoDB;
但这种方法有一个问题:需要执行很长时间,因为MySQL将按行把数据从原表复制到新表。
第2种方法是利用 mysqldump工具将数据导出到文件,然后修改导出的文本文件中的create table语句的存储引擎选项。
最后一种方法 是创建一个新的存储引擎的表,然后利用insert...select语句来导数据:
create table newtbl like oldtbl; alter table newtbl engine=innodb; insert into newtbl select * from oldtbl;
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql
, 存储
, 数据
, 引擎
, 数据库引擎
, 支持
, innodb
, RethinkDB
, 存储引擎
, 数据引擎
, mysql存储引擎选择
, mysql存储引擎比较
, MySQL数据库引擎
Infobright
主流工作流引擎介绍、mysql 存储引擎、mysql存储引擎比较、mysql memory存储引擎、mysql的存储引擎,以便于您获取更多的相关知识。