MySQL之存储引擎

学习MySQL存储引擎之前,要先了解什么是存储引擎。

存储引擎:MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

我们可以使用如下sql查询表的存储引擎

show table status like '表名'

返回结果集的Engine为该表的存储引擎

MySQL中的存储引擎从事务的角度来讲可分为两类

事务性存储引擎

非事务型存储引擎

MySQL最常用的两种存储引擎无非是InnoDB和MyISAM,相信只要接触过MySQL的人都会对这两种存储引擎有所了解。笔者下面着重来讲一下MySQL的几种存储引擎

●InnoDB存储引擎

InnoDB是MySQL默认的事务性存储引擎,也是使用最多,运用最广泛的存储引擎,它被设计用来处理大量的短期事务,短期事务大部分情况是正常提交的,很少会被回滚。InnoDB的性能和自动崩溃恢复特性,是的它在非事务存储引擎的需求中也很受欢迎。除非有非常特别的原因需要使用其它的存储引擎,否则应该优先考虑InnoDB引擎。当然也不是InnoDB也能适用于所用的场景,在实际开发中,每个开发人员应该着重从自己的业务点出发,从而选择适合自己的存储引擎。

InnoDB的数据存储是在tablespace中,tablespace是由一系列的数据文件组成。InnoDB可以将每个表的数据和索引放在单独的文件中。

InnoDB采用了MVCC来支持高并发,并且实现了4个标准的事务隔离级别,默认级别为REPEATABLEREAD,同时通过间隙锁(next-keylocking)策略来防止幻读的出现

●MyISAM存储引擎

在早期的MySQL,MyISAM是默认的存储引擎,MyISAM提供了大量的特性,包括全文索引、压缩等。但是,MyISAM引擎是不支持事务和行级锁的,这可能是该存储引擎最大的一个缺陷。尽管如此,MyISAM还是会有它自己的优势。任何事物都不是绝对的,技术也是如此。没有最好的技术,只有最合适的技术。每个程序员都应该选择最符合自己业务的技术。对于readonly的数据,或者表比较小的,则效率要高于InnoDB

MyISAM引擎的存储分为两个部分,数据文件和所以文件,分别已.myd和.myi为扩展名。

●Archive存储引擎

此储存引擎只支持INSERT和SELECT操作,Archive引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次select查询都需要执行全表扫描。

Archive引擎支持行级锁和专门的缓冲期,可以实现高并发的插入。在一个查询开始知道返回表中存在的所有行数之前,Archive引擎会阻止其它的SELECT操作。另外,Archive引擎在批量插入完成之前对读操作是不可见的。Archive引擎是非事务引擎,专门针对高速插入和压缩的简单引擎。

●CSV存储引擎

这个引擎可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。只需要将CSV文件copy到CSV存储引擎的数据目录下,就能使用在MySQL中已表的规则打开使用

●Memory存储引擎

这是一个完全为缓存而生的存储引擎,重启电脑之后,该引擎会持久化表结构,但不会持久化数据。它所有的数据都保存在内存里,完全没有I/O操作,所以性能非常高。

另外Memory表支持Hash索引,因此查询操作非常快,如果我们在开发过程中需要临时表或中间表用来存储一下临时数据,或许这个引擎是个不错的选择

MySQL还有许多其它的引擎,如

Blackhole引擎

Merge引擎

NDB引擎

除此之外还有大量的第三方引擎,一种比较牛逼的有

OCTP类引擎该引擎貌似有替代InnoDB的趋势

面向列的存储引擎

社区存储引擎等

相关推荐