mysql 执行概况_转mysql源码分析之SQL执行过程简介
本人打算从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执行过程简介相关推荐
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- 源码通透-mybatis源码分析以及整合spring过程
源码通透-mybatis源码分析以及整合spring过程 mybatis源码分析版本:mybaits3 (3.5.0-SNAPSHOT) mybatis源码下载地址:https://github.co ...
- 【Android 插件化】VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )
文章目录 一.目前的 API 现状 二.安装应用源码分析 1.安装按钮执行的操作 2.返回到 HomeActivity 执行的操作 一.目前的 API 现状 下图是 VirtualApp 官方给出的集 ...
- 【Spring框架】 ☞ 项目启动时执行特定处理及ApplicationListener源码分析
1.背景 在一些业务场景中,在容器启动完成后,需要处理一些诸如:kafka业务注册,数据处理,初始化缓存等的操作. 本文重点介绍如何在服务启动中,或启动完成时执行相关处理. 2.针对上述场景,有如下实 ...
- 分页池内存持续增长_鸿蒙内核源码分析(从进程/线程视角看内存)
这篇文章说说内存,内存的管理是极其复杂的模块,涉及到非常多概念,光地址就有逻辑,线性,物理地址三个,网上文章很多,参差不齐,没有很好基础或实战经验的同学基本得懵掉,本篇最后也有这些概念介绍.系列篇打算 ...
- springmvc项目在启动完成之后执行一次方法_SpringMVC源码分析
一 SpringMVC运行原理 二 SpingMVC源码分析 1 DispatcherServlet 1.1 DispatcherServlet继承结构 ServletConfig对象获取Init标签 ...
- springMVC源码分析--访问请求执行ServletInvocableHandlerMethod和InvocableHandlerMethod
在之前一篇博客中 springMVC源码分析--RequestMappingHandlerAdapter(五)我们已经简单的介绍到具体请求访问的执行某个Controller中的方法是在RequestM ...
- pigx框架 源码_【Pig源码分析】谈谈Pig的数据模型
1. 数据模型 Schema Pig Latin表达式操作的是relation,FILTER.FOREACH.GROUP.SPLIT等关系操作符所操作的relation就是bag,bag为tuple的 ...
- netty 5 alph1源码分析(服务端创建过程)
研究了netty的服务端创建过程.至于netty的优势,可以参照网络其他文章.<Netty系列之Netty 服务端创建>是 李林锋撰写的netty源码分析的一篇好文,绝对是技术干货.但抛开 ...
最新文章
- 微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现
- 使用Flow检查React,Redux和React-Redux的全面指南
- Problem A: 编写函数:三个数的最大最小值 (Append Code)
- 学生信息系统求助_Student Information Management -一个简单的学生信息管理系统(持续更新2)...
- Linux-重启与压缩命令
- 关于OnPaint、FormPaint会不停的触发 触发多次的情形---讨论总结
- 温网告别了两位美女:伊万和莎娃
- html中写色块,CSS3 彩虹色块
- 计算机二级web考点,2018年计算机二级考试WEB考点:web应用程序状态管理方式
- JAVA SE 基础复习-基本程序设计(1)
- [bzoj1033] [ZJOI2008]杀蚂蚁 Big MoNI
- 单片机c语言程序编写歌谱,单片机简谱程序
- HDU-4747 Mex
- 郑州共享门店系统开发优势有哪些?
- 浅析网购中的客户对商品的评论
- Python爬虫JD杜蕾斯源码
- cie规定的标准光源_标准光源概述_相关术语_所需条件-维库电子通
- 第五模块:WEB开发基础-第8章 Jquery开发BootStrap
- 长沙国储电脑城-学生买电脑-被坑记
- 什么是网关?什么是路由?什么是IP?