本人打算从SQL语句的执行开始学习和分析MYSQL源码,首先了解MYSQL是如何执行一条SQL语句的,详细了解它的执行过程之后,再深入学习执行一条SQL语句的运行原理。

1)从执行一条SQL语句的堆栈中查看MYSQL的执行过程

假设数据库"wlz"中存在表T1(create table t1(c1 int,c2 int);),并插入了两条数据(1,3),(2,4);可以使用show tables;查看当前数据库中存在哪些表;

执行SQL语句 select * from t1;

堆栈如下:

pthread_start-》handle_one_connection-》do_handle_one_connect-》do_command-》dispatch_command

从这个堆栈过程可以看出,执行一条SQL语句是通过一个线程来执行,也就是说一个会话使用一个线程来控制(可能表达有点误区),而SQL真正的开始分析执行的入口函数为dispatch_command

进入dispatch_command的函数后,因为上述SQL语句的类型为“COM_QUERY”,所以进入该分支;而处理SQL语句的函数主要是mysql_parse函数;

mysql_parse函数首先进行分析parse_sql(),然后进行执行mysql_execute_command();即(parse_sql-》mysql_execute_command)

执行函数mysql_execute_command()中执行语句的类型为SQLCOM_SELECT,

然后调用执行函数execute_sqlcom_select-》handle_select-》mysql_select,最终所有的处理都是在mysql_select函数中运行;

mysql_select函数中重要的三部分分别为prepare(准备)、optimize(SQL语句优化,即优化器)、exec(物理执行)。

2)从调试跟踪一条SQL语句的执行过程可以发现,在mysql中执行一条SQL语句,mysql的处理主要在于两个函数,其中一个是

mysql_parse,这个函数模块是把执行一条SQL语句分成了两部分,一部分为分析SQL语句,parse_sql函数的主要功能,第二个部分是执

行SQL语句,mysql_execute_command函数完成的功能,两者结合起来,一起完成一条SQL语句从分析到真正执行的全过程,也就是一般

教科书中提到的“词法解析-》语法解析-》逻辑计划-》查询优化-》物理执行计划“,parse_sql主要完成两面两步,词法和语法部分,后者完成后面

的三步;另一个函数是mysql_select,完成了计划的生成到执行步骤,也是mysql执行一条SQL语句的关键技术;对上述讲述,语法部分也可能

在mysql_select函数中的prepare中,因为暂时未阅读代码,但一般理解,应该是在parse_sql阶段。

3)小结

今天主要是大致调试跟踪了MYSQL执行一条SQL语句的整体过程,从词法分析到最终的物理执行计划的一个流水式学习过程,这样一来就大致了解了MYSQL的执行SQL语句的操作是怎么样的,接下来的工作是了解具体的解析过程和分析过程,包括里面涉及的步骤或算法。

PS:明天开始,阅读词法与语法解析部分,主要是语法解析部分,词法部分主要是了解MYSQL把一条SQL语句怎样划分,划分成什么样,相对来讲,

较简单点,而语法主要是查看MYSQL处理词法解析后的结构,把握每一部分的处理过程,如:如何处理order

by,子查询等,这里可能就涉及到对整个MYSQL的一个框架问题,所以需要花稍微长的时间来阅读和学习。

mysql 执行概况_转mysql源码分析之SQL执行过程简介相关推荐

  1. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  2. 源码通透-mybatis源码分析以及整合spring过程

    源码通透-mybatis源码分析以及整合spring过程 mybatis源码分析版本:mybaits3 (3.5.0-SNAPSHOT) mybatis源码下载地址:https://github.co ...

  3. 【Android 插件化】VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )

    文章目录 一.目前的 API 现状 二.安装应用源码分析 1.安装按钮执行的操作 2.返回到 HomeActivity 执行的操作 一.目前的 API 现状 下图是 VirtualApp 官方给出的集 ...

  4. 【Spring框架】 ☞ 项目启动时执行特定处理及ApplicationListener源码分析

    1.背景 在一些业务场景中,在容器启动完成后,需要处理一些诸如:kafka业务注册,数据处理,初始化缓存等的操作. 本文重点介绍如何在服务启动中,或启动完成时执行相关处理. 2.针对上述场景,有如下实 ...

  5. 分页池内存持续增长_鸿蒙内核源码分析(从进程/线程视角看内存)

    这篇文章说说内存,内存的管理是极其复杂的模块,涉及到非常多概念,光地址就有逻辑,线性,物理地址三个,网上文章很多,参差不齐,没有很好基础或实战经验的同学基本得懵掉,本篇最后也有这些概念介绍.系列篇打算 ...

  6. springmvc项目在启动完成之后执行一次方法_SpringMVC源码分析

    一 SpringMVC运行原理 二 SpingMVC源码分析 1 DispatcherServlet 1.1 DispatcherServlet继承结构 ServletConfig对象获取Init标签 ...

  7. springMVC源码分析--访问请求执行ServletInvocableHandlerMethod和InvocableHandlerMethod

    在之前一篇博客中 springMVC源码分析--RequestMappingHandlerAdapter(五)我们已经简单的介绍到具体请求访问的执行某个Controller中的方法是在RequestM ...

  8. pigx框架 源码_【Pig源码分析】谈谈Pig的数据模型

    1. 数据模型 Schema Pig Latin表达式操作的是relation,FILTER.FOREACH.GROUP.SPLIT等关系操作符所操作的relation就是bag,bag为tuple的 ...

  9. netty 5 alph1源码分析(服务端创建过程)

    研究了netty的服务端创建过程.至于netty的优势,可以参照网络其他文章.<Netty系列之Netty 服务端创建>是 李林锋撰写的netty源码分析的一篇好文,绝对是技术干货.但抛开 ...

最新文章

  1. 微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现
  2. 使用Flow检查React,Redux和React-Redux的全面指南
  3. Problem A: 编写函数:三个数的最大最小值 (Append Code)
  4. 学生信息系统求助_Student Information Management -一个简单的学生信息管理系统(持续更新2)...
  5. Linux-重启与压缩命令
  6. 关于OnPaint、FormPaint会不停的触发 触发多次的情形---讨论总结
  7. 温网告别了两位美女:伊万和莎娃
  8. html中写色块,CSS3 彩虹色块
  9. 计算机二级web考点,2018年计算机二级考试WEB考点:web应用程序状态管理方式
  10. JAVA SE 基础复习-基本程序设计(1)
  11. [bzoj1033] [ZJOI2008]杀蚂蚁 Big MoNI
  12. 单片机c语言程序编写歌谱,单片机简谱程序
  13. HDU-4747 Mex
  14. 郑州共享门店系统开发优势有哪些?
  15. 浅析网购中的客户对商品的评论
  16. Python爬虫JD杜蕾斯源码
  17. cie规定的标准光源_标准光源概述_相关术语_所需条件-维库电子通
  18. 第五模块:WEB开发基础-第8章 Jquery开发BootStrap
  19. 长沙国储电脑城-学生买电脑-被坑记
  20. 什么是网关?什么是路由?什么是IP?

热门文章

  1. 超越ChatGPT——SelfCommNet:一种拥有自我意识的神经网络设计
  2. 白话机器学习算法理论+实战之K近邻算法
  3. 轨迹预测Leapfrog Diffusion Model for Stochastic Trajectory Prediction
  4. 麒麟系统鼠标滚轮不能实现页面滚动
  5. 史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」
  6. R700指令集架构参考手册
  7. R700指令集架构参考手册——第一章:介绍
  8. 天生最感性的诱惑,这是你香喷喷的鸡哟
  9. 电脑主板PS/2接口
  10. matlab 地震属性分析,地震属性优化在储层预测中的应用