完成了sql的解析过程后,开始进入优化器:

调用的流程分为:
    mysql_select:
          JOIN::prepare:
          JOIN::optimize:
          JOIN::exec:
          
 
 
prepare过程:
     组装各个组件,包括:stepup tables, fields, condition, order
     1. tables:
          setup_tables_and_check_access:从table_list中检查访问权限,并加入到leaf_tables中,增加tables计数。
               setup_tables&&check_single_table_access
               
     2. setup_fields
          setup_wild:如果使用了*,这个地方要解开成字段。
          find_field_in_tables:查找字段是否存在表中 
          把item生成成field。
    
     3. setup_without_group
               setup_conds:处理where条件,检索conds中的字段
               setup_order:处理order子句,检索order中的字段
               setup_group:处理group子句,检索group中的字段
 
optimize过程:
     1. simplify_joins:所有的外连接更改为内连接。
     2. build_bitmap_for_nested_joins:为嵌套的join查询建立一个bitmap。
     3. optimize_cond:优化where条件
               remove_eq_conds:删除等价的条件
     4. prune_partitions:分区修剪,这里只是分区表的处理,非分区表不做处理
     5. make_join_statistics:
               table->file->stats.records;检索引擎上对表的统计信息,
               table->s->keys:获取table_share对象上这个表的所有key。
               update_ref_and_keys:获取索引信息
               choose_plan:
                    optimize_straight_join:
                    find_best:
                    greedy_search:
 
exec的过程:
     1. do_select:分解join
     2. sub_select: Retrieve records
     3. evaluate_join_record:
 
下一篇开始进行一些实验:

MySQL源码 优化器的更多相关文章

  1. MySQL源码 解析器

    sql请求发送到server端,需要经过解析器生成内部的数据结构对象,以方便进行优化和生成执行计划.解析器主要做了两件事情,词法分析和语法分析. 词法和语法分析:mysql使用lex词法分析器,yac ...

  2. [转]MySQL源码:Range和Ref优化的成本评估

    MySQL源码:Range和Ref优化的成本评估 原文链接:http://www.orczhou.com/index.php/2012/12/mysql-source-code-optimizer-r ...

  3. Linux(CentOS或RadHat)下MySQL源码安装

    安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake  :MySQL 5.5开始,使用cmake进 ...

  4. MySQL · 特性分析 · 优化器 MRR & BKA【转】

    MySQL · 特性分析 · 优化器 MRR & BKA 上一篇文章咱们对 ICP 进行了一次全面的分析,本篇文章小编继续为大家分析优化器的另外两个选项: MRR & batched_ ...

  5. MySQL源码解析之执行计划

    MySQL源码解析之执行计划 MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一.MySQL执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个 ...

  6. maridb\mysql 源码安装,以10.1.26版本为例

    mysql 源码安装(mariadb 10.1.26) 1.环境部署 1 安装cmake 源码安装三部曲或者yum install cmake2安装依赖包yum install -y ncurses- ...

  7. Dubbo入门到精通学习笔记(十九):MySQL源码编译安装、MySQL主从复制的配置

    文章目录 MySQL 源码编译安装(CentOS-6.6+MySQL-5.6) 一.服务器配置: 二.源码安装 MySQL5.6.26: MySQL主从复制的配置 环境 依赖课程 MySQL 主从复制 ...

  8. mysql源码解读之配置文件

    要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴.搭建mysql调试环境很简单,从官方下载mysql源码,利用cmake工具生成工程即可.为了方便 ...

  9. MySQL源码分析以及目录结构 2

    原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...

随机推荐

  1. css3中matrix函数的使用

    scale(sx,sy)对应matrix(sx,0,0,sy,0,0)  拉伸 rotate(θ)对应matrix(cosθ,sinθ,-sinθ,cosθ,0,0)  旋转 skew(θx,θy)对 ...

  2. MongoDB源码编译

    MongoDB源码编译 本人编译的版本编译的版本为mongodb2.6分支,目前MongoDB3.0已经发布,编译步骤和2.6的差不多,不过3.0版本要求编译器支持c++11标准,所以如果是在Linu ...

  3. leetcode problem 11 Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...

  4. MongoDB3.2版本与3.0版本写场景压力测试对比

    我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...

  5. 几个常用方法有效优化ASP.NET的性能

    一. 数据库访问性能优化 1),数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连 ...

  6. js在本地预览图片

    移动web <body> <form enctype="multipart/form-data" name="form1"> 上传文件: ...

  7. Castle ActiveRecord配置中需要注意的地方

    关于Castle 的开发可参考李会军老师的Castle 开发系列文章,里面有关于ActiveRecord学习实践系列和Castle IOC容器系列两个部分,是比较好的教程. 这里主要说明在Castle ...

  8. 常用webservice接口地址

    天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco       ...

  9. 使用EF6.0出现:CS0029 无法将类型“System.Data.Entity.Core.Objects.ObjectContext”隐式转换为“System.Data.Objects.ObjectContext”错误

    这是因为EF6.0重构了一些命名空间后,和VS原有的实体数据模型模板不一致了(ObjectContext context = ((IObjectContextAdapter)dataContext). ...

  10. iOS - Responder Chain

     在iOS中,当发生事件响应时,必须知道由谁来响应事件.这就是由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次 ...