mysql实战45讲学习笔记(一)

Mysql在架构上分为Servler层和存储引擎层。

  • Server层包含连接器、分析器、优化器、执行器等
  • 存储引擎层负责数据的存储和提取。架构模式是插件式的,包含InnoDB、MyISAM。


    image.png

连接器

连接器负责客户端建立连接、获取权限、位置和管理连接。
我们正常的工作中,都会使用可视化的数据库管理工具,想Navicat。这个就是客户端。
在使用客户端连接远程的数据库服务端时,第一步是建立TCP连接,然后认证身份。本质上来讲,就是将你的登录名和密码在数据库的表里查下,并查询出对应的账号和密码的权限。

连接建立成功后,可以理解为链接的状态和数据库存储的权限已经没有关系了。即使你修改了用户在数据库表里的权限,也不会影响当前连接的权限。个人理解这个是性能和安全上的妥协。

show processlist;  可以使用这个命令进行链接状态的查询

连接如何处于sleep状态,连接器会自动断开。时间由数据库wait_timeout控制。
连接的创建消耗性能,长链接也占用内存。毕竟这块是在内存中管理的,如果占用太大。会导致数据库被系统杀掉,导致数据库重启。
所以课程的作者给出了两种解决方案:

  1. 定期断开长连接
  2. 通过mysql_reset_connection 来重新初始化连接资源,来释放资源。mysql5.7版本后支持。

查询缓存

mysql 5的版本支持查询缓存,如果查询语句在缓存中,会直接查询缓存中的数据,不会继续走下去。
但是只要更新表中的一条数据,这个表上所有的查询缓存都会被清空。导致缓存的使用概率偏低,得不偿失。
不过我现在的公司业务的某个模块确实有符合这种场景,这个表只有几千条数据。查询大概每天几千万,且几个月才会更新一次。感觉很适合。哈哈哈

分析器

分析器的作用是对sql语句做解析,会先做词法分析。去除sql中含义的空格,识别其中的内容。并对各个词做转换。
然后开始做语法分析,判断这个sql语句是否符合mysql语法。 感觉这个就是编译原理中的内容。

优化器

说白了,就是优化你写的sql。根据你写的sql,找到最优的sql来执行。比如多个索引,使用哪个索引来的快。

执行器

首先判定,你有没有对这个表的查询权限。如果有就继续查询
如果有,那么就根据数据库创建时的引擎,调用对应的接口来进行查询

你可能感兴趣的:(mysql实战45讲学习笔记(一))