前言

SQL 执行流程中有一个模块叫做查询优化器,这个模块的功能主要是对 SQL 语法树进行逻辑优化和物理优化,最终生成执行计划交给执行引擎执行 SQL。

查询优化器主要分为两部分:一部分是逻辑优化,一部分是物理优化。

逻辑优化会将 SQL 语法树中的谓词转化为逻辑代数操作符,从而把语法树转化为关系代数语法树,然后进行语义优化、子查询优化、裁减冗余操作、连接提取公共表达式等一系列逻辑优化,最后生成逻辑查询执行计划。

物理优化会在逻辑优化后继续对 SQL 语法树进行改造,如果是多表连接的话会对表的连接顺序进行调整,SQL 语法树也会做相应的调整,另外还会使用代价估算器对单个表的扫描和多个表的连接顺序进行代价评估,并且选择一个代价最小的方案作为下一步优化的基础,最后生成物理查询执行计划。

查询优化器的架构设计

现有如下的一个三表连接查询,该 SQL 在查询优化器经历过哪些优化呢?

SELECT

s.stu_name,

s.class_no

FROM

student s,

course c,

student_course sc

WHERE

s.stu_no = sc.stu_no

AND sc.course_no = c.course_no

AND c.course_no = '101';

SQL 经过语法分析器解析为语法树,包括语法谓词、连接条件、连接表、要查询的字段。

mysql 优化器算法_SQL 查询优化器底层原理解析【MySQL 篇】相关推荐

  1. mysql 优化器代码_Mysql查询优化器

    Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率.那么到底mysql到底 ...

  2. mysql优化器分析器_MySQL查询优化器的概念和原理整个执行过程

    原标题:MySQL查询优化器的概念和原理整个执行过程 什么是MySQL的Query Optimizer 专门负责优化SELECT语句的优化器模块MySQL Query Optimizer通过计算分析收 ...

  3. mysql 优化器提示_Mysql查询优化器

    Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率.那么到底mysql到底 ...

  4. MySQL优化器_MySQL查询优化器

    MySQL优化器 MySQL架构图 讲到MySQL,就绕不开他的架构图.MySQL是一个经典的C/S架构.服务器这边分两层:第一层是Server层,第二层是存储引擎.Server层处理主要的业务操作流 ...

  5. MySQL 的索引、执行计划、优化器算法

    SQL处理流程 INDEX 索引 索引介绍 索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引擎实现: 索引相当于一本书的目录,可以优化查询. 优点: 索引 ...

  6. MySQL优化系列9-MySQL控制查询优化器Hints

    备注:测试数据库版本为MySQL 8.0 文章目录 一.控制查询计划评估 二. 可切换的优化 三. 优化器的Hints 3.1 优化器Hints概述 3.2 优化器Hints语法 3.3 连接顺序优化 ...

  7. Mysql 优化器内部JOIN算法hash join On-Disk Hash Join Grace Hash Join Hybrid hash join过程详解

    Mysql 各种hash join算法讲解 hash join的概述 提到hash join之前自然得说Nest loop join,以两个表的关联为例,它其实是个双层循环,先遍历外层的表(n条),再 ...

  8. mysql优化器怎么选择索引,为什么MySQL查询优化器会选择聚集主索引上的二级索引?...

    为什么Mysql优化器在执行'select * from lookup'而没有order by子句时选择二级索引. 它只是一个侥幸,或者这是一个幕后优化,假设你添加了一个二级索引,它比主键更重要. 我 ...

  9. MySQL优化器如何预估查询成本

    MySQL有哪些查询成本 MySQL 执行一个查询可以有不同的执行方案.在我们开发过程中,所有写过的sql语句都会丢给MySQL端的优化器.由优化器判断并选择其中成本最低,或者说代价最低的那种方案去真 ...

最新文章

  1. r语言将百分数化为小数_如何将数字格式化为R中的百分比?
  2. python3 字典 dict 创建 添加 修改 复制 取值 删除
  3. C语言文件读写(5)-文件位置相关
  4. 公需科目必须学吗_税务师要继续教育吗,2019税务师怎样继续教育?
  5. java流数据base64,Base64数据的流解码
  6. Python学习笔记之列表(三)
  7. Eclipse开发Android常用快捷键
  8. 输入字符数字串输出保存数字串
  9. CSS实现地图(一)
  10. Deep Ordinal Regression Network for Monocular Depth Estimation
  11. 华为鸿蒙 OS 尝鲜,跑了个 “hello world”!跑通后,我特么开始怀疑人生...
  12. Java图像处理(后面会补充PS啥的)
  13. 小学生计算机应用手抄报,小学生科技手抄报大全
  14. 小米天气api html,小米天气app
  15. 京东2015校园招聘笔试编程题
  16. wannacry 勒索病毒_WannaCry:勒索软件尸检
  17. Kafka手动提交偏移量的作用到底是什么???
  18. ASUS Vivobook archlinux声卡驱动
  19. 滴滴php面试题,面经:三次滴滴面试通过,一些真实细节分享给大家
  20. 烤仔DeFi课堂 | 从雅典到去中心化金融

热门文章

  1. mysql java jdbc 如何 update select
  2. 根据CPU核数合理设置线程池大小
  3. Intellij IDEA的下载和使用(针对学生的免费使用计划)
  4. Creating Apps With Material Design —— Defining Custom Animations
  5. oracle 无效索引
  6. Android APK加壳技术方案----代码实现
  7. SLAM学习,小白入门到殿堂级大牛资料整理
  8. 合理估算线程池线程数量
  9. C# 里怎样得到当前执行的函数名,当前代码行,源代码文件名。
  10. Linux系统的大小端模式