Mysql存储引擎之InnoDB存储引擎, MyISAM存储引擎, InnoDB和MyISAM的区别

MySQL中索引是在存储引擎层实现的,
执行查询引擎的命令show engines,就可以看到MySQL支持的存储引擎结果.

mysql支持存储引擎有好几种,咱们这里主要讨论一下常用的Innodb,MyISAM存储引擎。

1. InnoDB存储引擎

1.1 InnoDB特点

  • InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。相比较MyISAM存储引擎,InnoDB写的处理效率差一点并且会占用更多的磁盘空间保留数据和索引。

  • 提供了对数据库事务ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)的支持,实现了SQL标准的四种隔离级别。

  • 设计目标就是处理大容量的数据库系统,MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。

  • 执行“select count(*) from table”语句时需要扫描全表,因为使用innodb引擎的表不会保存表的具体行数,所以需要扫描整个表才能计算多少行。

  • InnoDB引擎是行锁,粒度更小,所以写操作不会锁定全表,在并发较高时,使用InnoDB会提升效率。即存在大量UPDATE/INSERT操作时,效率较高

  • InnoDB清空数据量大的表时,是非常缓慢,这是因为InnoDB必须处理表中的每一行,根据InnoDB的事务设计原则,首先需要把“删除动作”写入“事务日志”,然后写入实际的表。所以,清空大表的时候,最好直接drop table然后重建。即InnoDB一行一行删除,不会重建表。

1.2 使用场景:

  • 经常UPDETE/INSERT的表,使用处理多并发的写请求
  • 支持事务,必选InnoDB。
  • 可以从灾难中恢复(日志+事务回滚)
  • 外键约束、列属性AUTO_INCREMENT支持

2. MyISAM存储引擎

2.1 特点:

  • MyISAM不支持事务,不支持外键,SELECT/INSERT为主的应用可以使用该引擎。

  • 每个MyISAM在存储成3个文件,扩展名分别是:

    1. frm:存储表定义(表结构等信息)
    2. MYD(MYData),存储数据
    3. MYI(MYIndex),存储索引
  • 不同MyISAM表的索引文件和数据文件可以放置到不同的路径下。

  • MyISAM类型的表提供修复的工具,可以用CHECK TABLE语句来检查MyISAM表健康,并用REPAIR TABLE语句修复一个损坏的MyISAM表。

  • 在MySQL5.6以前,只有MyISAM支持Full-text全文索引

2.2 使用场景:

  • 经常SELECT/INSERT的表,插入不频繁,查询非常频繁
  • 不支持事务
  • 做很多count 的计算。

3. MyISAM和Innodb区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个存储引擎,这两个存储引擎各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理,而InnoDB类型支持。MyISAM类型强调的是性能,其执行速度比InnoDB类型更快,而InnoDB提供事务支持以及外键等高级数据库功能。

  • 具体实现的差别:
  1. MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  2. MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  3. MyISAM不支持外键,而InnoDB支持外键
  4. MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  5. InnoDB表比MyISAM表更安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值