【MySQL】存储引擎简介

来源:互联网 发布:python 乘方 编辑:程序博客网 时间:2024/06/04 22:47

一、存储引擎概述

  插件式存储引擎是 MySQL 数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。甚至可以按照自己的需要定制和使用自己的存储引擎。存储引擎也可以叫表类型。
  MySQL 5.0 支持的存储引擎包括 MyISAM、InnoDB、BDB、MEMORY、 MERGE、 EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED 等,其中 InnoDB 和 BDB 提供事务安全表,其他存储引擎都是非事务安全表。
  从mysql5.5开始,默认存储引擎是InnoDB,之前是MyISAM。

二、查看存储引擎

2.1 show engines \G;
  查看mysql所支持的存储引擎,以及从中得到mysql默认的存储引擎。
2.2 show table status from database where name=”tablename”
  准确查看某个数据库中的某一表所使用的存储引擎。
  例子:show table status from seckill where name=’seckill’;

三、几种常见的存储引擎简介

  常见存储引擎的对比(图片出自《深入浅出mysql》)。
  
mysql常见存储引擎的对比

3.1 InnoDB

  Mysql5.5起,InnoDB是mysql的默认存储引擎。
  InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比 MyISAM的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
  
  在以下场合下,使用InnoDB是最理想的选择:
  1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求;
  2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎;
  3.自动崩溃恢复。与其它存储引擎不同,InnoDB表能够自动从崩溃中恢复;
  4.外键约束。MySQL支持外键的存储引擎只有InnoDB;
  5.支持自动增加列AUTO_INCREMENT属性。

3.2 MYISAM

  mysql5.5之前,MyISAM 是 MySQL 的默认存储引擎。MyISAM 不支持事务、也不支持外键,其优势是访问的速度快。
  每个 MyISAM 在磁盘上存储成 3 个文件,其文件名都和表名相同,但扩展名分别是:.frm(存储表定义)、.MYD(MYData,存储数据)、MYI (MYIndex,存储索引)。
  MyISAM 的表又支持 3 种不同的存储格式,分别是:静态(固定长度)表、动态表、压缩表。
  
  MyISAM存储引擎特别适合在以下几种情况下使用:
  1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
  2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

3.3 MEMORY

  MEMORY 存储引擎使用存在内存中的内容来创建表。每个 MEMORY 表只实际对应一个磁盘文件,格式是.frm。MEMORY 类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用 HASH 索引,但是一旦服务关闭,表中的数据就会丢失掉。
  MEMORY 类型的存储引擎主要用在那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果。对 MEMORY 存储引擎的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

3.4 InnoDB和MyISAM的区别

  InnoDB:支持事务、行级锁、外键约束、自动崩溃恢复。 innodb是mysql的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,短期事务大部分情况是正常提交的,很少会被回滚。innodb的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑innodb引擎。
  MyISAM:全文索引、压缩、访问速度快,不支持事务和行级锁。 MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(gis)等,且访问的速度快。但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

参考资料

《深入浅出Mysql》
《高性能Mysql》
MySQL存储引擎总结
MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)