《MySQL是怎样运行的》读书笔记
第一次看这本书封面的时候,觉得这本书应该不会讲的有多好,因为封面看起来有一些幼稚,但是当我开始读这本书的时候,我发现是我错了,这本书讲的太好了,由浅入深的平缓学习曲线深深的吸引了我。
在读第一章的时候,知道了Mysql是个什么“东西”,是怎么安装的,安装了以后有哪些文件,有哪些启动方式,有哪些连接方式,有哪些存储引擎。安装每个人都会,从知道mysql开始到现在,在windows,linux,macos上,我安装了mysql大概能有二三十次,但我从来没有研究过,目录下到底有哪些文件(可能就ls的时候扫了一眼),就只知道mysqld。
MySQL的bin文件夹中的一些可执行文件。
1、mysqld 代表 mysql 服务器程序。运行它就可以直接启动一个MySQL服务进程。但这个可执行文件并不常用。(好吧,原来我知道的这个还并不常用)
2、mysqld_safe 是个启动脚本,会调用 mysqld,顺便启动一个监控进程。
3、mysql.server 也是一个启动脚本,会间接调用 mysqld_safe。在执行它时,在后面添加start参数就可以启动服务器程序了。mysql.server start
4、mysqld_multi 运行多个服务器实例时,可以对每个服务器进程的启动和停止进行监控.
MySQL客户端和服务器进程在通信时采用的集中方式:
1、 TCP/IP (用的最多的,试想一下是不是经常 mysql -h xxx.xxx.xxx.x,或者在java配置文件中xxx.xxx.xxx.x:3306)
2、 命名管道或共享内存
3、 UNIX域套接字
而MySQL的整个查询过程大致分为几个部分:
1、 连接管理:主要负责连接的建立与信息的认证
2、 解析与优化:主要进行查询缓存、语法解析、查询优化
3、 存储引擎:主要负责读取和写入底层表的数据。
另外,尽管MySQL有那么多的存储引擎,但从MySQL5.5.5版本开始,InnoDB就已经时默认的搜索引擎了,就可以看出,InnoDB是我们平时用的最多的搜索引擎。(也的确是这样,我们平时用它最多)。
在我们平时使用MySQL存储数据的时候,或多或少会遇到过存emoji表情的时候报错或者存不进去的情况。这就是MySQL中字符集设置错了的原因。我们都知道设置成utf8,但其实utf8在MySQL中的另一个名字叫utf8mb3,它是阉割过的UTF-8字符集,只使用1~3字节表示字符。所以在需要存emoji表情的时候,需要使用utf8mb4字符集,它才是正宗的UTF-8字符集,使用1~4字节表示字符。
而在我们平时做模糊查询的时候,也肯定或多或少的遇到过,模糊查询‘abc%’的时候,却怎么也查不出数据库中的“ABCD”,这就是MySQL中比较规则设置错了的原因。只有在将比较规则设置成utf8_general_ci这种通用的比较规则,才会不区分大小写。各个规则大致如下:
1、_ai : 不区分重音
2、_as:区分重音
3、_ci:不区分大小写
4、_cs:区分大小写
5、_bin:以二进制的方式比较
第四五章讲的是InnoDB的数据存储,知道了页是InnoDB中磁盘和内存交互的基本单位,也是InnoDB管理存储空间的基本单位,默认大小为16KB。而InnoDB为了不同的目的设计了不同类型的页,把用于存放记录的页称为数据页。
其实整本书最吸引我的地方就是第六七章的B+树索引,是我既爱又恨的章节。爱是因为这两章真的讲的非常好,让我学到了很多,恨是因为有点复杂,有的地方看不懂。
InnoDB存储引擎的索引是一颗B+树,完整的用户记录都存储在B+树的第0层的叶子节点,其他层次的节点都属于内节点,内节点中存储的是目录项记录。
而InnoDB的索引分为两种。
1、 聚簇索引:以主键值的大小作为页和记录的排序规则,在叶子节点处存储的记录包含了表中的所有列。任何一张有主键的表,都有聚簇索,也是最重要的节点,任何一个二级索引的回表操作都需要聚簇索引。
2、 二级索引:这个索引就是用户自己建立的索引,以索引列的大小作为页和记录的排序规则,在叶子节点处存储的记录内容是索引列+主键。
InnoDB存储引擎的B+树根节点在创建之日就不再移动了。
建立索引是为了提高查询效率,让汽车变成火箭的,但是,但是,但是,B+树索引在空间和时间上都要付出代价,所以不能瞎建索引,可能会让汽车变成单车~而在建立索引的时候,尽可能的让列数据类型小,因为数据类型越小,索引占用的存储空间就越小,在一个数据页内就可能存放更多的记录,磁盘I/O带来的性能损耗也就越小,读写效率就越高。
除了这些,还有很多值得我去细细揣摩的地方,比如如何优化,事务是怎样的,redo/undo日志、锁等等,另外,还没有选读这本书的同学们,非常推荐读一读这本书,平时用到最多的除了java就是mysql了,这本书是一本值得翻看两遍、三遍甚至N遍的书,没有人读完第一次就能完全掌握的,但是一旦都掌握,那离DBA也就不远了。