mysql笔记7--一句查询语句的过程

1 sql语句示例

1 select *from A where id=1

2 mysql基本架构图

(1)Mysql分为Server层和引擎层两个部分

(2)Server层包括连接器,查询缓存,分析器,优化器等,其功能包含了大部分内置函数(日期,时间等)。

(3)存储引擎默认使用InnoDB。其所有组件的基本架构图如下所示

3 Server层相关组件原理

  • 执行逻辑第一步连接器

   (1) 首先连接数据库,连接器负责与客户端建立连接,获取相关权限和管理这个连接。认证你的身份就是输入用户名和密码,如果不对,会返回没有权限,如果用户名

           密码正确,就会从权限表中取出相应用户的权限。

           通过命令显示当前的连接数,以及哪些是空闲连接(也就是字段为sleep的。那么如果客户端长时间保持连接但是没有什么其他的操作,连接器会自动的将其断开,默认8小时。配置文件中的wait_timeout

           

           (2)长连接与短链接

      长连接:客户端连接上以后,客户端保持请求,一直的使用这个连接。------>内存占用率高,导致OOM(系统杀死进程),采取的措施

         定期断开连接。

          mysql5.7以后的版本,当执行完一次操作时间比较长的任务时,可以通过mysql_reset_connect重新的初始化连接的资源。

                      短链接:   客户端连接以后,操作一小会就断开,下次操作再连。

  • 执行逻辑第二步查询缓存 

    (1) 查询缓存原理

               当连接成功以后,比如咱们使用select查询,首先去缓存查看,缓存中是按照key-value的方式存储,key为执行的操作方法,value为执行操作后的结果,如果命中,直接返回查询

     查询结果。

     (2) 为什么不要使用查询缓存?

         因为查询缓存的失败率很高,因为只要一个表更新,这个表所有的查询缓存就会清空。mysql5.7提供了参数去掉查询缓存,参数query_cache_type=DEMAND.mysql5.8

             没有了缓存查询模块。

  • 执行逻辑第三步分析器

    (1)分析器步骤

        分析器先做词法分析,比如通过"select"得知道是查询,"A"是表等。-------->语法分析,也就是看是否满足mysql语法,一般错误会提示第一个出现错误的位置。

  • 执行逻辑优化器

      经过了分析器大概知道了想做什么,那么优化器是从多种方案中选择一种更好(效率)。一旦优化得阶段确定,那么执行方案就确定了

  • 执行逻辑执行器

     (1)确认权限

        先判断是否有权限对表进行相关操作,没有则报错。如果有权限,那么执行器会根据表得引擎定义,使用引擎提供的接口。

      (2)执行器执行流程------比如最开始的创建的A表

        调用引擎取表第一行,判断ID是否为1,如果是1存在结果集,不是则跳过

         调用殷勤处理第二行,重复相同的逻辑

        综合所有结果集和返回给客户端。

4 总结

  学习了一个简单的select操作都经历哪几个步骤,每个步骤的具体作用是做什么,以及相关组件的优点缺点。

原文地址:https://www.cnblogs.com/lanjianhappy/p/11938223.html