01 | 基础架构:一条SQL查询语句是如何执行的?

#写在前面

最近在看丁奇在专栏中讲解mysql的一套课程,作为观摩老师傅的技巧不由的掏出了我的小本本把每集我认为比较核心的知识点记录在了自己的博客上。同时也分享出极客时间的这套课程
MYSQL丁奇45讲,侵必删。

知识点

  • 连接器
  • 查询缓存
  • 分析器
  • 优化器
  • 执行器

mysql基础架构

mysql的基础架构图

连接器

  • 建立连接
  • 获取权限
  • 维持管理链接

mysql -h$ip -P$port -u$user -p

连接器负责的权限是再每次连接时查询出来的,即使后续管理员修改了权限没有断开权限也不会更改。
show processlist可以看见当前的数据库连接状态,如果长时间未连接会自动断开wait_timeout控制它,默认8小时

长连接:连接成功后客户端持续请求,一直使用同一个连接
短连接:每次执行完几次查询后就断开连接,下一次查询重新建立一个
利:建立连接比较麻烦有时间和内存开销
弊:内存开销,MySQL在执行过程中临时使用的内存管理在连接对象中,5.7之前需要程序之间写逻辑杀死进程并重启,5.7过后mysql_reset_connection初始化连接资源

查询缓存

查询缓存适合于配置表,因为不常修改。查询缓存只要表中的一行数据更新整张表的查询缓存都会清空,存在的形式是key-value既 语句->结果。MYSQL提供了SQL_CACHE显式来指定。需要注意的是MYSQL8.0后的版本删除了查询缓存

select SQL_CACHE * from users where id = 28866

分析器

这个环节会解析语法,查看语法是否合法,语句的动作以及操作的表

优化器

在经过分析器后,MYSQL知道了用户的意图,然后选择最优的索引或者执行方案进入下个阶段,这个在讲索引的时候会讲到

执行器

开始执行时要先判断下你是否对相应表有权限,如果没有返回错误提示,如果有权限就会根据引擎定义去使用引擎接口调取数据

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~