[MySQL] 主流存储引擎介绍
16lz
2021-01-22
我们知道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;
更多相关文章
- MySql查询随机几条数据
- MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
- 有没有一种方法可以在不破坏外键依赖关系的情况下将MySQL数据库
- mysql 先排序后分组再排序查询数据
- 数据库中的结果分页如何工作?
- MySQL-数据库安装及基本SQL语句
- MySQL SET,ENUM类型数据小结
- 从模型到控制器并返回到模型的数据
- mysql去除严格模式/插入数据库遇到重复保证唯一