InnoDB 四大特性如下:

  1. 插入缓存,Insert buffer
  2. 二次写,double write
  3. 自适应哈希索引,adaptive hash index
  4. 预读,read ahead

插入缓存

索引数据存储在磁盘上,主键索引由于天然自增,无须磁盘的随机 I/O,只需不断追加即可。但普通索引大概率无序,默认情况下需要进行随机磁盘 I/O 操作,效率极差

为了解决普通索引插入效率低下的问题,InnoDB 存储引擎引入 Insert Buffer 的概念,对于普通索引(非聚集索引)不是直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓存池中,如果在直接插入,否则先放入 Insert buffer 对象中,然后以一定频率和辅助索引页子节点进行合并操作,此时通常能将多个插入合并到一个操作中,提高插入性能

使用前提:

  1. 普通索引(非聚簇索引)
  2. 索引不唯一

这里索引不唯一是因为如果要保证唯一,每次操作还得去判断当前索引值是否已存在,而判断又涉及到磁盘随机 I/O,从而发挥不出插入缓存的优势


二次写

InnoDB 索引页一般 16KB 大小,而操作系统写文件以 4KB 为单位,这就导致同一页需要分四块分别写入。此时就存在写完一块系统崩溃或者断电等特殊情况,此时就导致写入数据不完整的问题

二次写就是为了解决该问题,double write 分为两部分,一部分 doublewrite buffer,其大小 2MB,另一部分是磁盘上共享表空间中连续的 128 个页,也是 2,B

每次刷盘时这样处理:先将脏数据写入 doublewrite buffer,doublewrite buffer 每次 1MB 写入共享表空间的磁盘上,完成以上两步后调用 fsync 函数,将数据同步到各个表空间

如果操作系统在将页写入磁盘的过程中崩溃,InnoDB 重启发现页数据损坏后,可以从共享表的 doublewrite 中找到副本,用于数据恢复


自适应哈希索引

InnoDB 虽然主要使用 B+ 树作为索引结构,但在某些特殊场景下用到哈希索引。InnoDB 会监控对表上索引的查找,如果发现某个索引频繁被访问,则建立哈希索引。InnoDB 会自动根据访问的频率和模式来为某些页建立哈希索引


预读

当 InnoDB 预计某些页很快就要被访问时,会异步加载对应页数据到缓冲池。该思路就类似空间局部性:如果某块内存被访问,那么它周围的内存大概率也会被访问。

InnoDB 采用两种预读算法提高 I/O 性能:线性预读 和 随机预读

  • 线性预读:以块为单位,一块等于64页。如果某一块中的被顺序读取的页数超过预定值,则 InnoDB 将会异步的将下一块读取到 buffer pool 中

  • 随机预读:以页为单位,当某一个块中的一些页在 buffer pool 中被发现时,InnoDB 会将该块中的剩余页一并读到 buffer pool 中,目前已废弃

InnoDB 四大特性相关推荐

  1. innoDB四大特性

    聚簇索引  在InnoDB中,数据本身是通过的B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造的一颗B+Tree.同时叶子节点的中存放的就是整张的表的行记录数据,也将聚簇索引的叶子节点 ...

  2. innodb事务的四大特性

    一.事务简介: 事务是并控制单位,是用户控制操作的一个序列. 在MySQL种innodb支持事务,通常以执行sql开始,以提交(commit)或回滚(rollback)结束, 1.原子性(Atomic ...

  3. MySQL数据库中的事务(四大特性)

    1. 事务的介绍 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元. 2. 事务的四大特性 原子性(Atomicity) 一 ...

  4. 怎么实现事务_你可能知道事务的四大特性,但是不一定知道“事务的实现原理”...

    说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?"我:"ACID,即原子性(Atomicity).隔离性 ...

  5. acid四大特性_深入理解MySQL的ACID四大特性原理

    专注于Java领域优质技术,欢迎关注 作者:孤独烟 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity) ...

  6. 数据库事务的四大特性和四个隔离级别

    一.数据库事务的四大特性 事物是指作为一个单元的一组有序的数据库操作,单元是不可分割的,如果一组数据的所有操作都执行成功,事物完成,进行事物提交(commit),其修改作用于所有数据库进程.有一个操作 ...

  7. 事务四大特性如何保证

    事务 1. 事务的基本概念 数据库事务是构成单一逻辑工作单元的操作集合 事务是一组操作的结合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销请求,即这些操作要么同时成功, ...

  8. MySQL中事务四大特性的实现详解

    MySQL事务的四大特性的实现 基本概念 原子性实现 隔离性实现 已提交读 可重复读 持久性实现 日志文件刷新策略 基本概念 事务的四大特性ACID : 原子性Atomic : 事务的所有的SQL操作 ...

  9. 事务的四大特性及实现原理

    事务的四大特性及实现原理 1.原子性(Atomicity) 不可再分,事务的最小单位.在一个事务中,我们对数据库的操作,要么都成功,要么都失败,不可能出现部分成功或部分失败的情况.若操作失败必须回滚. ...

最新文章

  1. tomcat部署 修改域名和访问域名时去掉项目名
  2. 从消息到数据湖:看 Apache RocketMQ、Hudi、Kyuubi 最新进展
  3. 启动计算机引导win10,教您win10引导项丢失怎么办
  4. php判断ie版本,PHP获取浏览器版本信息
  5. 【转载】用Delphi实现程序间的数据传递
  6. 树莓派换源、vim更新:树莓派更换国内可用镜像源
  7. 工作179:接口对接
  8. CentOS7如何安装vsftpd
  9. log4j2+ELK
  10. PHP目前比较常见的五大运行模式
  11. snownlp文本分词、情感分析、文本相似度与摘要生成
  12. 图解SynchronousQueue原理详解-非公平模式
  13. Git 命令行(cygwin) + Git Extensions + Git Source Control Provider
  14. java itext 里表格_Java解析PDF里的表格内容
  15. 2015中国企业500强名单
  16. 必须要了解的编程基础--哈希与字符串
  17. css3实现3d图片旋转效果
  18. vue双花括号的使用
  19. 微视点:网传社交游戏公司“五分钟”面临倒闭,引发各方热议
  20. 【MM VS价】移动平均价V标准价格S(一)

热门文章

  1. python scapy traceroute_07python实现traceroute程序
  2. 华宇软件华为鸿蒙,华为鸿蒙系统将正式发布!A股软件板块被引爆 联络互动连续三个一字涨停...
  3. 8.2 社区组织结构
  4. java 保留两位有效数字
  5. 超级网管员——网络管理
  6. 移动互联网用户体验指数MUI
  7. BurpSuite如何在各浏览器下配置代理
  8. Linux——把用户加入和移除用户组
  9. excel文件外链多了打开慢怎么办
  10. 海贼王片头旁白前后两篇