MySQL 学习笔记(1)-基础架构

一、mysql数据库架构总体上分为2大部分:

  • 1.1、server层
    • server层主要包括连接器、分析器、优化器、执行器以及查询缓存等等。涵盖大部分核心功能,所有跨存储引擎的功能都在这一层实现,比如存储过程,视图、触发器等。
  • 1.2、存储引擎层
    • 存储数据,提供读写接口,mysql拥有插件式的存储引擎,可以在创建表的时候指定存储引擎,不同的存储引擎提供不同的功能特性,常见有的InnoDB,MyISAM,Memory等。

 

二、server层

  • 2.1、连接器
    • 连接器负责建立连接、获取权限、维持和管理连接,可见客户端第一个就是和连接器打交道。
    • 连接器获取的权限在整个连接期间不会发生变化,如果权限有变更,需要断开重连才能生效。
    • 连接有长连接和短连接之分,建立连接是个开销不小的动作,所以要尽量避免频繁的建立连接,可以使用长连接,但是长连接也会导致占用过多的资源得不到释放,造成系统资源紧张,所以如果使用长连接,在进行一些占用内存比较大的连接后要释放下连接,也就是断开重连。如果使用的是5.7版本,通过执行mysql_reset_connection可以不用断开重连,就能将连接初始化,释放资源。
  • 2.2、查询缓存
    • 查询缓存适合在那些数据不会频繁发生变更的表上使用,这样可以调过优化器、执行器部分的操作,在判断某条sql执行有结果缓存存在且没有失效的情况下,直接返回结果。
    • 5.7版本中,通过命令show variables like '%query_cache_type%';查看可以看到默认值为off,也就是默认这个功能是关闭的。在8.0版本中,这个功能已经被删除了。
  • 2.3、分析器
    • 分析器主要做两件事,一个是语法分析,一个语义分析。
    • 语法分析主要包括词法分析、语法分析,也就是分析语句从结构上是否正确。
    • 语义分析是在语法分析正确的基础上,再判断表是否存在、表中是否有指定的列,用户是否有权限等等。
    • 举个例子:如果一条语句类似 select * rfom tab_name;这个在语法分析阶段就会报错,如果一个表中没有col这个列,但是有这么一条语句,select col from tab_name;在语义分析阶段就会报错。包括用户如果对表tab_name没有权限,也会报错。
  • 2.4、优化器
    • 优化器是关系型数据库中非常重要的一个组成部分,因为数据库80%的性能问题是由sql引起的。而优化器生成的执行计划决定了sql的执行效率。
    • 因为一条sql可以有很多种执行路径都能得到逻辑正确且相同的结果,但是不同的计划有着不同的执行效率,这个就需要优化器来决定譬如使用哪个索引,join中先访问哪张表等等。
  • 2.5、执行器
    • 有了优化器生成的执行计划,执行器只需要按照执行计划,调用存储引擎提供的各种接口,获取满足条件的数据并返回给客户端。

三、总结

  • 连接器和客户端打交道,负责验证对方身份,传话
  • 分析器主要弄懂客户端要干啥,弄懂客户端说的话
  • 优化器在以上基础上将任务分解,找到一个效率比较高的方法
  • 执行器根据优化器提供的图纸干活,干活的过程主要和存储引擎的各种接口打交道

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章