MySQL引擎详解

来源:互联网 发布:如何判断存在sql注入 编辑:程序博客网 时间:2024/04/20 19:35

MySQL的存储引擎是MySQL体系架构中的重要组成部分,也是MySQL体系结构的核心,插件式的存储引擎更是它区别于其它数据库的重要特征。它处于MySQL体系架构中Server端底层,是底层物理结构的实现,用于将数据以各种不同的技术方式存储到文件或者内存中,不同的存储引擎具备不同的存储机制、索引技巧和锁定水平。常见的MySQL存储引擎有InnoDB、MyISAM、Memory、Archive等等,它们具备各自的特征,我们可以根据不同的具体应用来建立对应的存储引擎表。可以使用show table status like ‘表名’ 来显示表的相关信息。

InnoDB

MySQL存储引擎可以分为官方存储引擎和第三方存储引擎,InnoDB就是强大的第三方存储引擎,具备较好的性能和自动崩溃恢复特性,目前应用极为广泛,是当前MySQL存储引擎中的主流,它在事务型存储和非事务型存储中都很流行。
InnoDB是MySQL默认的事务型引擎,也是最重要、使用最广泛的存储引擎。InnoDB最大的特点是支持事务。它被用来处理大量的短期事务,短期事务大部分是正常提交的,很少会被回滚。除非特殊需要使用其他搜索引擎,否则应该优先使用InnoDB引擎。

MyISAM

MyISAM存储引擎是MySQL官方提供的存储引擎,它在InnoDB出现并完善之前是MySQL存储引擎的主流,但目前逐渐被淘汰主要因为其不支持事务,这或许源于MySQL的开发者认为不是所有的应用都需要事务,所以便存在了这种不支持事务的存储引擎。
在MySQL 5.1及之前的版本中,MyISAM是默认的存储引擎。MyISAM支持全文索引、压缩、空间函数等,但是MyISAM不支持事务和行级锁,而且崩溃后无法安全恢复。虽然它不支持事务,但是对于只读或者表比较小时,可以依然使用MyISAM(但是不要默认使用MyISAM,应该默认使用InnoDB)。

MySQL内建的其他存储引擎

Archive
Archive引擎只支持insert和select操作,适合日志和数据采集类应用。Archive引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。

CSV
CSV引擎可以将普通csv文件作为MySQL表处理,但是这种表不支持索引。可以将Excel等电子表格软件中的数据存储为csv文件,然后复制到MySQL数据目录下,就能在MySQL中打开使用。所以CSV引擎可以作为一种数据交换的机制。

Memory
如果需要快速访问数据,且这些数据不会被修改,重启后丢失也没关系,则可以使用Memory表(以前也叫做Heap表)

选择合适的引擎

大部分情况下,InnoDB都是正确的选择,所以Oracle在MySQL 5.5版本中将InnoDB作为默认的存储引擎了。考虑存储引擎时,应先考虑以下几个因素:

事务

如果需要事务支持,那么InnoDB是目前最稳定且经过验证的选择。如果不需要事务,且主要是select和insert操作,那么MyISAM是不错的选择,一般日志型应用符合这一特性。

备份

如果可以定期关闭服务器来执行备份,那么这个因素可以忽略。反之,若需要在线热备份,那么InnoDB就是基本的要求。

崩溃恢复

数据量较大时,系统崩溃后如何快速恢复是一个需要考虑的问题。MyISAM崩溃后发生损坏的概率比InnoDB高很多,而且恢复速度也要慢。

一般来说,

MyISAM适合: InnoDB适合: (1) 做很多count 的计算
(2) 插入不频繁,查询非常频繁
(3) 没有事务 (1) 可靠性要求比较高,或者要求事务
(2) 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。


查看存储引擎

一般情况下,MySQL会默认提供多种存储引擎,可以通过下面的查看:

(1)看你的MySQL现在已提供什么存储引擎: mysql> show engines;(2)看你的MySQL当前默认的存储引擎: mysql> show variables like '%storage_engine%';(3)你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql> show create table 表名;

参考自《高性能MySQL》