小仙女讲InnoDB(6)——综述

时光匆匆呀,一晃,竟然到了8月中旬ღ( ´・ᴗ・` )。《小仙女讲InnoDB》也更新完了,欢迎大家的参观~

MySQL的概念

数据库是物理操作系统文件或其它形式文件类型的集合,mysql是一个单进程多线程架构的数据库。

体系结构

小仙女讲InnoDB(6)——综述
其中,InnoDB就是咱们的主角。

连接mysql的方式

连接方式 适用环境
TCP/IP 任何平台上,mysql的客户端和实例在两台服务器上,两台机器通过一个TCP/IP网络连接
命名管道和共享内存 在Windows平台上,在同一台服务器上
UNIX域套接字 在Linux和UNIX环境下使用,且mysql的客户端和数据库实例在一台服务器上

其中,TCP/IP是使用最多的方式。

InnoDB的概念

InnoDB是mysql5.5之后默认的存储引擎。

体系结构

小仙女讲InnoDB(6)——综述

(1)后台线程
其有两个作用:其一是负责刷新内存池中的数据,保证缓冲池中缓存的是最新的数据。其二是将已修改的数据文件刷新到磁盘文件,保证在数据库发生异常时,能进行数据恢复。
(2)内存池
内存池起的是缓存的作用,这让我想到了redis,读写分离……,区别是内存池在数据库内部,其余两个在数据库外部,但是思想是差不多的。

  • 读取:

当对数据库中的数据进行读取操作时,会优先读取内存池中的数据,如果没命中,再去读取磁盘上的数据。

  • 修改:

当对数据进行修改时,会先修改内存池中的页,再以一定的频率刷新到磁盘上。这一点是和redis、读写分离不一样的地方。

关键特性

(1)插入缓冲
对于非聚集类索引的插入和更新操作,不是每一次都直接插入到索引页中,而是先插入到内存中。就相当于加了一层“redis”。
具体做法是:如果该索引页在缓冲池中,直接插入;否则,先将其放入“插入缓冲区”中,然后再以一定的频率和索引页合并。这时,就可以将同一个索引页中的多个插入合并到一个IO操作中,大大提高写性能。

(2)两次写
在应用重做日志前,会先建立一个页的副本,当写入失效发生时,先通过页的副来还原该页,再进行重做。
(3)自适应哈希索引
哈希是一种非常快的查找方法,一般仅需要一次查找就能定位数据,而B+树需要3~4次。InnoDB会监控对表中数据的查询,如果觉得换为哈希索引能提升速度,就会自动建立哈希索引。

(4)异步IO
用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部发送完毕后,再等待所有IO操作的完成。同时,也可以将多个IO合并为一个IO。

(5)刷新邻接页
当刷新一个脏页时,InnoDB会检测该页所在区的所有页,如果是脏页,会一起刷新。这样能减少IO次数。

系列博客目录

小仙女讲InnoDB(1)——索引
小仙女讲InnoDB(2)——锁
小仙女讲InnoDB(3)——事务
小仙女讲InnoDB(4)——文件
小仙女讲InnoDB(5)——表

小结

最近对怎么系统深入学习一门技术又有了深的体会:
(1)市面上讲此类技术的书挺多,先选一本进行仔细通读。选的标准是:薄、图多、大白话多
(2)读完后进行总结,此时要注重每章节和整本书的框架,还有对新概念的理解。
(3)再去翻阅其它的书籍,当在另一本书中找到了共鸣,这也就是真正理解了的时候。

本系列博客的参考资料为《MySQL技术内幕:InnoDB存储引擎》。说说仔细研读这本书的体会吧:实操性比较强,写的挺全面,如果语句再精炼些就更好了。如果满分5分,打个3分吧。