首页 > 数据库 > MySQL > 正文

高性能Mysql-存储引擎(InnoDB)

2024-07-24 13:00:01
字体:
来源:转载
供稿:网友

MySQL将每个数据库(也可以称为schema)保存为数据目录下的一个子目录,创建表时,MySQL会在数据库子目录下创建一个和表同名的 .frm文件保存表的定义。(也因此MySQL数据库和表的定义对大小写的敏感性与具体平台密切相关)

一、InnoDB InnoDB是MySQL的默认事务型引擎,也是最重要,使用最广泛的存储引擎。他是用来处理大量的短期事务,短期事务大部分情况是正常提交的,很少会被回滚。 InnoDB的性能和自动崩溃恢复特性,使得它在非事务型的需求中也很流行。

InnoDB的历史: 2008年发布InnoDB plugin,适用于MySQL 5.1 版本,但当时MySQL默认还是使用旧的InnoDB引擎。在Oracle收购Sun后发布的MySQL5.5中才彻底使用InnoDB plugin替代了旧版本的InnoDB

这个新版本支持一些新特性,例如利用排序创建索引、删除或者增加索引时不需要复制全表数据、新的支持压缩的存储格式,新的大型列值如BLOB的存储方式,以及文件格式管理等。

InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成,可以将每个表的数据和索引存放在单独的文件中。

采用MVCC来支持高并发,并且实现4个标准的隔离级别,默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止幻读的出现。

InnoDB表示基于聚族索引建立的,聚族索引对主键查询有很高的性能,若表上的索引较多的话,主键应当尽可能的小。

二、MyISAM 5.1之前版本采用的存储引擎,提供了包括全文索引,压缩,空间函数等,但MyISAM不支持事务和行级锁,而且有个缺陷就是崩溃后无法安全恢复。MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名

三、MySQL内建的其他存储引擎 Archive引擎 只支持Insert和select操作,select查询需要执行全表扫描,适合日志和数据采集类应用。支持行级锁和高并发的插入。

Blackhole引擎 CSV引擎 Federated引擎 Memory引擎 Merge 引擎 NDB集群引擎

四、如何选择合适的引擎 大部分情况下,InnoDB都是正确的选择 除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎。例如,要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合。

除非万不得已,否则建议不要混合使用多种存储引擎,否则可能带来一系列复杂的问题,以及一些潜在的bug和边界问题。

日志型应用

假设需要实时地记录一台中心电话交换机的每一通电话的日志到MySQL中,或者通过Apache的mod_log_sql模块将网站的所有访问信息直接记录到表中。

这一类应用的插入速度有很高的要求,数据库不能成为瓶颈。MyISAM或者Archive存储引擎对这类应用比较合适,因为他们开销低,插入速度非常快。

做分析报表时,利用MySQL内置的复制方案将数据复制一份到备库,然后在备库,然后在备库上执行比较消耗时间和CPU的查询。

不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知的场景中,InnoDB的速度都可以让MyISAM望尘莫及。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表