您的位置:首页 > 数据库 > MySQL

MySQL引擎详解

2017-05-31 16:55 309 查看
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》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 存储引擎