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

  1. SELECT NOW(),CURDATE(),CURTIME()

退役笔记一#MySQL = lambda sql : sql + &#39; Source Code 4 Explain Plan &#39;的更多相关文章

  1. Oracle SQL Developer中查看解释计划Explain Plan的两种方法

    方法一: 比如要查看解释计划的SQL是:select * from hy_emp 那么在输入窗口输入: EXPLAIN PLAN FOR select * from hy_emp 之后执行,输出窗口会 ...

  2. MySQL在linux上的source code安装方法(configure)

    1.建立操作系统用户和组 [root@faspdev ~]# groupadd mysql [root@faspdev ~]# useradd -g mysql mysql 2.解压安装文件,进入解压 ...

  3. Mysql中的sql是如何执行的 --- 极客时间学习笔记

    MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...

  4. 《MySQL必知必会》学习笔记——第1章 了解SQL

    第1章 了解SQL 本章将介绍数据库和SQL,它们是学习MySQL的先决条件. 1.1 数据库基础 你正在阅读本书,这表明你需要以某种方式与数据库打交道.在深入学习MySQL及其SQL语言的实现之前, ...

  5. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  6. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  7. mysql导入导出sql文件

    window下 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2. ...

  8. MySQL 常用的sql语句小结(待续)

    mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHER ...

  9. mysql批量执行sql文件

    1.待执行的sql文件为1.sql.2.sql.3.sql.4.sql等 2.写一个batch.sql文件: source .sql; source .sql; source .sql; source ...

随机推荐

  1. 【录音】Android录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...

  2. alias

    1.语法:alias[别名]=[指令名称] [root@rusky /]# alias pingm="ping 127.0.0.1"  [root@rusky /]# pingmP ...

  3. linux-ln命令

    ln分为软链接和硬链接 1.软连接 -s   ln -s /mnt/hgfs/SHARE hvshare2 相当于在当前目录下新建一个名为hvshare2的快捷方式指向/mnt/hgfs/SHARE路 ...

  4. 前端笔试题目总结——应用JavaScript函数递归打印数组到HTML页面上

    数组如下: var item=[{ name:'Tom', age:70, child:[{ name:'Jerry', age:50, child:[{ name:'William', age:20 ...

  5. WCF 客户端与服务端消息传输

    WCF很多需要认证信息,保证服务的安全,可以使用消息来实现 WCF 实现消息的方式: WCF中有两个接口: IClientMessageInspector [定义一个消息检查器对象,该对象可以添加到 ...

  6. GridView格式化数据DataFormatString

    设定BoundField的DataFormatString,通常有以下几种 DataFormatString= "{0:C}" 货币,货币的格式取决于当前Thread中Cultur ...

  7. 带权并查集 poj1182

    首先要注意核心代码 int find(int i){    if(i == fa[i])        return fa[i];    int tt = find(fa[i]);    num[i] ...

  8. web标准(复习)--5 超链接伪类

    今天我们开始学习超链接伪类,包含以下内容和知识点: 链接的四种样式 将链接转换为块状 用css制作按钮 首字下沉 一.超链接的四种样式 超链接可以说是网页发展史上一个伟大的发明,它使得许多页面相互链接 ...

  9. php 之 数据访问 查询关键字 (0506)

    根据数据库中的car表做一个汽车查询页面:  一.一个关键字查询: 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  10. SPI协议总结

    四种工作模式: Mode 0 CPOL=0, CPHA=0 Mode 1 CPOL=0, CPHA=1Mode 2 CPOL=1, CPHA=0 Mode 3 CPOL=1, CPHA=1 常使用Mo ...