MySQL—浅谈MySQL存储引擎

和大多数数据库不同,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是不二之选。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值