MySQL—浅谈MySQL存储引擎

来源:互联网 发布:东莞天行健网络怎么样 编辑:程序博客网 时间:2024/05/22 17:50

和大多数数据库不同,MySQL中有一个存储引擎的概念,对于不同的存储需求可以选择最优的存储引擎。如下是MySQL种常见的几种引擎以及其特性。

这里写图片描述

其中MyISAM和InnoDB是我们最最常用的两个存储引擎,下面主要将对比这两种引擎的特点,以及分析在不同的需求下如何选择合适的引擎。

MyISAM

MyISAM是MySQL默认的数据库引擎,它不支持事务、不支持外键,优点是访问速度比较快,因为使用表级锁所以不存在死锁(后面会讲),但是一个重要缺陷就是不能在表损坏后恢复数据。所以对于事务完整性要求或者以SELECT、INSERT为主要需求的应用,MyISAM是最好的选择。

每一个MyISAM在磁盘上存储为3个文件:

  • table_name.frm(表定义)
  • table_name.MYD(表数据)
  • table_name.MYI(表索引)

由于数据和索引可以存放在不同的目录,所以可以获得更快的速度(平均分布IO)。

InnoDB

InnoDB提供了具有提交、回滚和崩溃恢复能力的事务安全使用了行级锁,因此锁冲突较MyISAM小很多。但是InnoDB写的处理效率较差,并且占用更多的磁盘空间保留数据和索引。

  • 外键约束:MySQL支持外键约束的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对用的索引。
  • 存储方式:
    使用共享表空间:表结构在.frm中,数据在innodb_data_home_dir中,索引在innodb_data_file_path定义的表空间中。
    使用多表空间存储:表的表结构仍然在.frm中,但是每一个表的数据和索引分开放在.ibd中。

选择合适的存储引擎

  • MyISAM:默认的插件式引擎。如果应用是以读、写操作为主,更新和删除操作为辅,对事物的完整性和并发性要求不高,那么是非常合适的,如WEB、数据仓库等应用环境下。

  • InnoDB:用于事务处理应用程序,支持外键。如果应用对事务完整性有比较高的要求,并发条件下需要数据的一致性,除了数据的读、写以外还有大量的删除更新操作,那么InnoDB是更加合适的引擎。InnoDB有效降低删除和更新带来的锁定,还可以确保事务的完整提交和回滚。对于类似财务系统和计费系统,InnoDB是不二之选。

原创粉丝点击