数据库存储引擎(InnoDB、MyIASM、Memory和Archive)详解

1. 数据库存储引擎概念:

  • 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。
  • 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能,现有的数据库管理系统(DBMS)都支持多种不同的数据引擎。

2. InnoDB(B+树)
InnoDB 底层存储结构为B+树(如下图所示), B树的每个节点对应innodb的一个page,page大小是固定的,一般设为16k。其中非叶子节点只有键值,叶子节点包含完成数据。
在这里插入图片描述
特点:

  • InnoDB为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在 SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合。

  • InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE…AUTO_INCREMENT=n;"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。

  • 对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。

  • MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括restrict、cascade、set null和no action。其中restrict和no action相同,是指限制在子表有关联的情况下,父表不能更新;casecade表示父表在更新或删除时,更新或者删除子表对应的记录;set null 则表示父表在更新或者删除的时候,子表对应的字段被set null。

适用场景:

  • 经常更新的表,适合处理多重并发的更新请求。
  • InnoDB支持事务。
  • 可以从灾难中恢复(通过bin-log 日志等)。
  • 外键约束,只有InnoDB支持外键。
  • 支持自动增加列属性auto_increment。

3. MyIASM

特点:

  • MyIASM是MySQL 默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
  • ISAM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。在设计之初就预想数据组织成有固定长度的记录,按顺序存储的。
  • ISAM 是一种静态索引结构,不支持事务处理。

MyISAM的表支持3种不同的存储格式:

  • 静态(固定长度)表。
  • 动态表。
  • 压缩表。

适用场景:

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,同时插入操作比较少,那么MyISAM是更好的选择。
  • 进行频繁的count操作。
  • 没有事务的操作。

4. Memory

特点:

  • Memory(也叫HEAP)堆内存:使用存在内存中的内容来创建表。
  • 每个MEMORY 表只实际对应一个磁盘文件。
  • MEMORY 类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH 索引。但是一旦服务关闭,表中的数据就会丢失掉。
  • Memory 同时支持散列索引和B 树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符方便数据挖掘,散列索引相等的比较快但是对于范围的比较慢很多。

适用场景:

  • memeory存储引擎使用hash索引对于等值查找非常高效,常用于查找邮编和地区对应的关系表。
  • 由于memeory的易失性,可以用于存储在分析中产生的中间表。
  • 使用memroy存储引擎的表一定要是可以再生的或者是不需要的。

5. InnoDB、MyIASM和Memory性能对比
在这里插入图片描述
6. Archive

特点:

  • 会缓存所有的写,并用zlib对表的数据进行压缩。
  • 相比MyISAM会更加节约磁盘io,比myisam和innodb更见节约磁盘空间,一个几T的表可能只要几百M的存储空间。
  • 创建表的时候会产生两个文件:一个是数据文件是以ARZ为后缀的文件,一个是frm后缀存储表结构信息。
  • 只支持insert 和select操作,可以实现高并发的插入,支持在自增id上建立索引。

适用场景:

  • 归档数据、日志信息(系统功能模块访问日志)。

参考博客:https://blog.csdn.net/qq_29168493/article/details/79066399

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值