Mysql内核:INNODB存储引擎--《十一》Insert Buffer
2017-08-12 01:09
375 查看
11.2基本概念
innodb对于自增主键值得插入是顺序的,因此插入能有较高的插入性能。但在实际生产环境中,用户表的主键仅有并只能有一个,然后表中可能存在多个辅助索引。辅助索引根据类型在插入时可以分为比较顺序到的插入和随机的插入两种。比较顺序的插入可能是时间字段,随机的插入可能更为广泛。innodb存储引擎insert buffer的设计思想是,在插入时首先判断插入的辅助索引叶子是否还在缓冲池中。若在则直接插入,否则将插入的记录放到insert buffer中,然后根据一些算法将insert buffer缓存的记录通过后台线程慢慢的合并回辅助索引页中。这样做好处:
减少磁盘的离散读取
将多次插入合并为一次操作
举例子,第一列为人名,第二列为page_no(实际上page_no并不是数据,在这里用来表示页号):
(‘huangweiyang’, 2), (‘licao’, 10), (‘gaomingxi’, 4), (‘lishuai’, 15), (‘hejiejie’, 2)
后面的列表示原先应插入的辅助索引的page_no,可以看到页的访问时无序的。然而当插入到insert buffer中,删除记录可能完全在一个页中,因此减少了李珊读取。在insert buffer中,,记录根据应插入辅助索引的叶子节点的page_no进行排序。排序完毕后,上述记录就会从insert buffer向辅助索引合并,比如(‘huangweiyang’)(‘hejiejie’)此时就可以批量合并了 :)
注意,insert buffer 只能缓存非唯一约束的索引。若是唯一索引,那么在插入时需要判断插入的记录是否唯一,这需要读取辅助索引页。这不就完蛋了,insert buffer不起作用喽!
11.3架构实现
11.3.1 存储结构
不用说,B+树!键值就是待插入到辅助索引页的page_no。B+树索引页的大小一样为16kb,内存同样使用缓冲池。innodb存储引擎存在一个insert buffer bitmap页,用来追踪每个缓存页的剩余空间,当剩余空间小于某个阈值时,
占坑
相关文章推荐
- MySQL内核:InnoDB存储引擎 卷1
- MySQL内核:InnoDB存储引擎 卷1
- MySQL大总结1-20(InnoDB存储引擎的关键特性、Insert Buffer、Double Write、异步IO、刷新临接页(Flush Neighbor Page))
- MYSQL内核:INNODB存储引擎 卷1pdf
- mysql存储引擎之------InnoDB
- MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
- mysql数据据存储引擎InnoDB和MyISAM的优势及区别
- MySQL InnoDB存储引擎
- MySQL存储引擎MyISAM与InnoDB的优劣
- MySql存储引擎MyISAM和InnoDB的区别
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- mysql存储引擎之------InnoDB
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
- MySQL存储引擎--MyISAM与InnoDB区别
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- MySQL最常用的二种存储引擎MyISAM和InnoDB的介绍
- 关于MySQL InnoDB存储引擎中的锁
- MySQL - 存储引擎的 InnoDB 与 MyISAM 之争