我买的是第二版的,这本书主要是以 Mysql 5
做的一些解读。
在此之前,我了解关于 Mysql
优化方面知识的渠道都是来自于一些博客,视频,这次打算系统性的学习了解 Mysql
的各方面知识。
第一章的名称为 Mysql 架构
。
第一章主要谈的有这么几点,都是粗略的谈了一下。
- 逻辑架构
- 并发控制与锁
- 事务与隔离级别
- 多版本并发控制
- Mysql 中的各种常见引擎
逻辑架构
在本书中,谈到的逻辑架构分为了三层 (由上至下)。
- 客户端层
- 核心层
- 存储引擎层
这三层跟我以前学到的有些不一样。之前学到的也是分为三层,第一层一样都是客户端层。
第二层是数据库管理引擎层,第三层为数据层。
显然之前学的是那位老师为了让视频更简单易懂,将核心层和存储引擎层放到了一起。
但实际上,根据我从书中所了解到的,如果要更专业的划分架构层,当然是核心层要和引擎层分开,因为他们又不同的功能,在实际架构中他们也是分层处理的(在这里我觉得还可以加个数据层,它存在于我们的磁盘或者内存中)。
在这里客户端层主要负责连接,授权认证,安全等处理。
第二层核心层,它包含了 Mysql
的大多数核心内容,查询解析,分析,优化,缓存等内置函数都在这一层中完成。
存储引擎锁提供的功能也集中在这一层,例如存储过程,触发器,视图等。
第三层包含了存储引擎。负责提取和存储数据。服务器通过存储引擎 API 与引擎进行交互。这个 API 隐藏了存储引擎直接的区别,使得他们在查询层是透明的。
除了 Innodb 外,该层不会进行 SQL 解析,也不会互相通讯,只是简单的响应服务器请求( Innodb 会解析外键定义,因为 Mysql 自身没有实现它,)。
根据书中述描,我们能得知,是服务器是与第三层存储引擎进行通讯,那我就奇怪了,书中并没有说服务器层,在逻辑图中也没有提到,甚至在逻辑图中,第一层与第二层是有箭头指向的,而第二层与第三层没有箭头指向。在这里我是疑惑的。
于是我在搜索引擎中查询了一番,在很多人的博客中,他们给第二层与第三层中加了个箭头,也就意味着,书中所述的服务器就是第二层?在他们的博客中,第二层还有个玩意,叫查询执行引擎,正是这个引擎与与存储引擎发生交互的。
到底是怎样,还是得看后面书中有没有更多的解释了,现在还不能下断论,但是为了更好的阅读与学习,我在这里还是假设别人博客里所画的那幅图,是正确。
优化与执行
Mysql
会在第二层解析查询语句,并创建一个内部数据结构(解析树),然后对其进行各种优化。其中包括重写查询,决定查询的读表顺序,以及选择索引。
用户可以通过指令影响他的优化策略,也能要求服务器给出优化过程说明。
书中描述到,优化器并不关心某个表使用哪种存储引擎(因为第三层对于第二层来说是个黑盒,用API进行通讯)。但是,存储引擎又对第二层的优化过程存在影响,所以,第二层的优化器会请求第三层,为某种具体操作提供性能与开销方面的信息和表内数据统计信息。
例如,某些引擎可以支持对某类查询更有利的索引类型,后面能够了解更多。
根据以往的知识,能够了解到,重复向 Mysql 发出两次查询指令,第二条查询速度会飞快。这是因为Mysql缓存了上次的查询结果和语句。
根据本节内容可以得知,正是第二层的缓存功能发挥了作用。由此也可以得知,如果缓存成功,将会减少哪些操作呢?
第一,当然是不用去第三层操作数据了,即减少了磁盘 IO 。第二,也不会再生成解析书了,没有解析书,当然也就不会再有优化了。而不用优化,当然也不用第二层与第三层再次进行通讯获取优化信息了。
以上为第一章节的Mysql
的逻辑架构粗解。
原文链接: 高性能 Mysql 第一章第一节,Mysql的逻辑架构