退役笔记一#MySQL = lambda sql : sql + ' Source Code 4 Explain Plan '

退役笔记一#MySQL = lambda sql : sql + ' Source Code 4 Explain Plan '

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Mysql 查询运行过程 大致分为4个阶段吧:

语法分析(sql_parse.cc<词法分析, 语法分析, 语义检查 >)

>>sql_resolver.cc # JOIN.prepare

生成逻辑查询plan(sql_optimizer.cc)

>># JOIN.optimize

生成物理查询plan(sql_planner.cc)

run the explain plan(sql_executor.cc) JOIN.exec

JOIN.prepare() :

子查询的冗余子句消除

in类型子查询优化 resolve_subquery() 

将all/any等类型子查询转换为min/max操作 对简单子查询进行的优化

 

JOIN.optimize():

子查询上拉 flatten_subqueries()

把外连接优化为内连接   simplify_joins()

消除嵌套连接

where子句, join/on子句,having子句化简,含有常量的表达式化简,等式合并 optimize_cond() opt_sum_query()

优化没有group by 子句的下的count(*) min() man()

确定多表连接路径 make_join_statistice()

优化distinct

创建暂时表存储暂时结果优化分组排序 choose_table_order()

事实上,逻辑与物理优化,有点混乱,分得不明白,

就是在物理查询优化之后,继续进行了部分逻辑优化

仅两种单表扫描方式:

index scan(others), table scan(JT_ALL)

Opt_range.h > class QUICK_SELECT_I > 利用索引扫描滴总接口

其几个子类 见source code;

基本的类和结构体:

查询树 class st_select_lex 

索引 struct st_key_create_information   class Key_part_spec

连接表 st_join_table

连接类  JOIN : public Sql_alloc

条件  COND_EQUAL

位置  struct st_position

代价估算  Cost_estimate

SELECT NOW(),CURDATE(),CURTIME()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118781.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Angularjs 服务

    Angularjs 服务AngularJS服务(Service):www.runoob.com/angularjs/angularjs-services.htmlAngularJS内建了30多个服务。官网搜索service吧https://docs.angularjs.org/api/ng/service/$window$http是AngularJS应用中最常用的服务。服务向服务器发送请求,应用响应服…

    2022年7月25日
    8
  • TDD 与FDD 的区别

    TDD 与FDD 的区别我们知道FDD(FrequenceDivisionDuplex)和TDD(TimeDivisionDuplex)分别是频分双工和时分双工的英文缩写。FDD系统是指系统的发送和接收数据使用不同的频率,在上行和下行频率之间有双工间隔,如GSM、CDMA、WCDMA系统都是典型的FDD系统;时分双工系统则是系统的发送和接收使用相同的频段,上下行数据发送在时间上错开,通过在不同时隙发送上下行数据可

    2022年5月22日
    46
  • Linux安装JDK1.8(看这一篇就够了) 附安装包下载地址

    文章目录Linux-jdk1.8下载地址1.都要做什么?2.安装2.1创建两个文件夹2.2使用工具上传至Linux服务器2.3解压到install文件夹中3.配置环境变量3.1编辑文件3.2将内容复制到文件中3.3检查是否配置完成3.4更新profile文件3.5重新检查4.切换版本(本地已有jdk时操作,没有请忽略!)Linux-jdk1.8下载地址点击下载jdk1.8-l…

    2022年4月6日
    56
  • qmake中文官方文档

    qmake中文官方文档qmakeQMake提供了一个用于管理应用程序,库,其他组件的构建过程的面向工程系统QMake扩展了每个工程文件的信息,生成一个执行编译和连接过程的Makefile本文翻译自Qt4.8官方文档。一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的Mak

    2022年5月19日
    46
  • OpenStack开发_软件架构与应用开发实践报告

    OpenStack开发_软件架构与应用开发实践报告一起研究系列:OpenStack架构分析与实践

    2022年4月21日
    50
  • 光棍节程序员闯关秀writeup[通俗易懂]

    光棍节程序员闯关秀writeup[通俗易懂]答题链接https://1111.segmentfault.com/第一关首先当然是右键查看源码啊点击链接进入下一关第二关还是老样子,右键查看源码这个key是要放在URL链接里敲回车的第三关根据前两关这个难度,第三关估计在请求头或者响应头里,先开burp刷新,拦截返回包拿到flag第四…

    2022年7月16日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号