Mysql InnoDB读书笔记--关键特性

InnoDB关键特性包括:

插入缓冲,两次写,自适应哈希索引


插入缓冲:

最令人激动的关键特性。Insert Buffer不仅在缓冲池中,同时也和数据页一样,是物理页的一个组成部分

例如一张表,id为自增主键,name为non unique的key。插入时,数据也根据id无需随机IO,而name这种非聚集的非唯一索引,则需要离散的访问非聚集索引页,插入性能降低。这是B+树的特性所决定的必然结果--非聚集索引插入的离散型

插入缓冲则被开创性地用于解决这个问题:对于非聚集索引的插入或更新,并不是每次直接插入索引页,先判断这个索引页是否在缓冲池,若在,则直接插入,若不在,则先放入插入缓冲,再以一定频率执行插入缓冲和非聚集索引页子节点的合并操作(merge),大大提升性能。

插入缓冲的必备条件:non unique+non primary的key


两次写:避免部分写失效(partial page write),有些文件系统本身就提供了写失效防范机制如ZFS,就不需要double write了。

提高可靠性。写失效:正在写一个页16K,只写了4K,宕机。可以用redo log恢复,但是redo log记录的是对页的物理操作,如偏移量222,写‘aaa’。如果这个页本身已损坏,则重做是没有意义的。所以需要一个页的副本,当写入失效时,用这个副本来还原,然后才应用redo log。

流程:脏页--memcpy--》double write buffer-->写入共享表空间--》fsync同步,然后double write buffer 才开始刷新到磁盘。


自适应哈希索引:

mysql的Heap存储引擎默认使用hash索引。innodb提供了另一种实现方法。

InnoDB会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以是自适应的。

InnoDB会自动根据访问的频率和模式来为某些页建立哈希索引。

哈希索引只能用来搜索等值的查询,不能适用范围查询等。


InnoDB plugin=新版本的innoDB存储引擎。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值