当前位置: 首页 > 编程日记 > 正文

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

前言

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

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

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

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

11b3473b3f1449b8bcfa76009f1df2a0.png

查询优化器的架构设计

现有如下的一个三表连接查询,该 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 经过语法分析器解析为语法树,包括语法谓词、连接条件、连接表、要查询的字段。

相关文章:

gprs发送信号对方如何接收_和接收缓冲区比较:Netty发送缓冲区是如何设计的,why?...

点击上方蓝字关注我吧!本篇文章大概3300字,阅读时间大约10分钟前面文章,透彻分析了Netty的接收缓冲区优化的套路和实现细节,以及写数据和刷新数据的宏观流程和细节:从源码出发:在宏观上把握Netty写数据到应…

原 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f8-bus/ 本文出自方志朋的博客 转载请标明出处: Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间…

python读取数据校验数据_Python通过Schema实现数据验证方式

Schema是什么?不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据。意味着我们要对用户输入进行严格的验证,web开发时一般输入数据都以JSON形式发送到后端API,API要对输入数据做验证。…

String,StringBuffer

String类代表不可变的字符序列。 String s1 "hello"; String s2 "hello"; s1 s2 > true "hello"是字符串常量,存在data seg中,编译器对data seg有优化,对于已经有的数据,不是重新分配空间&a…

蒙特卡洛粒子滤波定位算法_粒子滤波——来自哈佛的详细的粒子滤波器教程【1】...

本文原版链接:https://www.seas.harvard.edu/courses/cs281/papers/doucet-johansen.pdf本文是哈佛大学相关研究人员于2008年发表的一篇关于粒子滤波的详细教程,至今已被引用1687次。目录:介绍Introduction1.1 序言Preliminary remarks1.2 教…

人脸识别的一些资源

人脸识别的全部源代码(在Visual C6.0下可以运行识别)http://www.61ic.com/Download/DaVinci/Code/201304/121592.html 智能分析接口(支持车牌识别,人脸识别等智能类型)提供DEMO和源码,供参考!http://www.61ic.com/Down…

mysql where关键字_MySQL WHERE 子句

我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。语法以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:SELECT field1, field2,...fieldN FROM table_name…

mac远程连接windows工具_Windows远程MAC系统

第一步、在 Mac 上设置好屏幕共享1. 1先请在苹果 Mac 电脑上的“系统偏好设置”窗口中打开“共享”功能,如图所示接着在共享窗口中的左侧点击启用“屏幕共享”选项,如图所示当屏幕共享功能打开以后,请点击“电脑设置”按钮,如图所…

Tomcat虚拟目录设置

ssh $host "rm -fr /var/www/$tomcat_name/webapps/*" 远程分发war包部署tomcat项目时&#xff0c;需要先清除项目目录。 --------------------------------------------------------------------------------------- <context path"" docBase"&qu…

30005 rust_Steam三连冠老游戏《腐蚀(RUST)》为什么突然火起来了?

Steam新一周(1月18日-1月24日)销量榜公开&#xff0c;《赛博朋克2077》跌落至第五&#xff0c;《荒野大镖客2》前进到第六&#xff0c;而第一人称僵尸生存网络游戏《Rust》已经三连冠了&#xff0c;腐蚀是2013年的老游戏了&#xff0c;很多人问这个游戏值不值得购买&#xff0c…

(6)解构赋值的用途

解构赋值的用途1.交换变量的值 var a 100; var b 200; var t; t a; a b; b t; //解构赋值的写法完成【ES6交换变量的值】 var x 100; var y 200; [x, y] [y, x]; console.log(x); console.log(y); 优点1:直观 优点2:一一对应 优点3:节省内存空间(不用多申请变量) 2.从函…

python lstm_python-Keras中LSTM的补充

好的,所以您的问题让我开始思考,我想我已经解决了,但是什么都没有.这是我为获取LSTM实现背后的一些见识而编写的代码段.from keras.layers import LSTMfrom keras.models import Sequentialmodel Sequential()model.add(LSTM(10, input_shape(20, 30), return_sequencesTrue))…

Jtabbedpane设置透明、Jpanel设置透明

摘自https://zhidao.baidu.com/question/983204331427010139.htmljava中如何设置Jtabbedpane为透明 20在Jtabbedpane下有背景图片&#xff0c;如何设置让他透明呢&#xff1f;0oo宝贝xxX |浏览 1147 次 |举报我有更好的答案2014-12-30最佳答案你好&#xff0c;你可以增加以下代…

mysql 按日期删除数据库_DAY11 - MySQL入门(数据库的增、删、改、查 基本操作)...

一、 数据库的介绍二、 MySQL的基本语法l 注释&#xff1a;单行注释&#xff1a; #注释内容单行注释&#xff1a; -- 注释内容(注意&#xff0c;两个“--”之后有一个空格)多行注释&#xff1a; /*注释内容*/l 语句行&#xff1a;一条语句也称为一条命令&#xff0c;通常用一个…

LeetCode之461. Hamming Distance

------------------------------------------------------------------ AC代码&#xff1a; public class Solution {public int hammingDistance(int x, int y) {return Integer.toString(x^y,2).replaceAll("0","").length();} } 题目来源&#xff1a; h…

机器学习模型 知乎_机器学习:模型评估之评估方法

​机器学习已经成为了人工智能的核心研究领域之一&#xff0c;它的研究动机就是为了让计算机系统具有人的学习能力以便实现人工智能。目前&#xff0c;关于机器学习定义的说法比较多&#xff0c;而被广泛采用的定义是“利用经验来改善计算机系统自身的性能”​。由于“经验”的…

NSDate NSCalendar NSString之间的故事以及转换

1.NSDate 和 NSString 之间的转换 这之间的转换主要依靠NSDateFormatterNSDate <------> NSStringNSDateFormatter *formatter [[NSDateFormatter alloc]init];formatter.dateFormat "yyyy-MM-dd HH:mm:ss";NSString *strDate [formatter stringFrom:date];…

bzoj 4695: 最假女选手

……一道丧病线段树膜板题…… 被常数卡的死去活来……QAQ 学到了些奇技淫巧&#xff1a;把取min标记 和 区间最小值 合并 可以快很多…… #include <bits/stdc.h> #define lc(t) ((t) << 1) #define rc(t) (((t) << 1) | 1) #define N 2000010 #define INF …

python 打包 .app 运行 控制台窗口_Python打包工具

1 Python打包工具目前在windows平台上将Python程序打包成exe文件主要有三个工具。今天将一个Tkinter写的界面程序打包成exe文件&#xff0c;三个工具都试了一遍&#xff0c;感觉PyInstaller会比较好用一些。2 py2exe2.1 下载安装2.2 启动脚本写一个setup_py2exe.py文件from dis…

地址池命令 思科理由_思科互联网络操作系统 ——路由器接口

点击蓝字关注我们路由器接口接口配置是最重要的路由器配置之一&#xff0c;因为若没有接口,路由器几乎就毫无用处。另外&#xff0c;要与其他设备通信&#xff0c;接口配置必须绝对精确。配置接口时&#xff0c;我们需要指定网络层地址、介质类型和带宽,还需使用其他管理命令。…

mysql数据去重语句_数据库 mysql 语句

LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言mysql:常用代码create table CeShi1(Uid varchar(50) primary key,Pwd varchar(50),Name varchar(50),Nation varchar(50),foreign key(Nation) references Nation(Code))写查询语句需要注意&#xff1a;1.创建表的时候&…

mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别

转载地址: https://www.cnblogs.com/exmyth/p/3616672.html在mysql中存在着各种utf8编码格式&#xff0c;如下表&#xff1a;1&#xff09;utf8_bin2&#xff09;utf8_general_ci3&#xff09;utf8_general_csutf8_bin将字符串中的每一个字符用二进制数据存储&#xff0c;区分大…

利用闭包实现多次ajax请求只执行最后一次

点一个按钮&#xff0c;则向服务器请求资源&#xff0c;不作处理时&#xff0c;多次点击后会有很多个请求在等待。我们知道一般我们用ajax是异步请求&#xff0c;那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能是最后一次也可能是第…

3dmax批量导出fbx_推荐一款超实用的3DMAX插件——模法师

模法师集成于3DMAX上&#xff0c;到老子云平台下载插件后&#xff0c;直接双击运行安装就能使用了。有多好用呢&#xff1f;好比游戏开了挂&#xff0c;效率瞬间翻几番。主要提供三大功能&#xff1a;1、批量格式转换简单地说&#xff0c;你可以把大量模型文件&#xff0c;同时…

python实现平衡二叉树_LeetCode 110. 平衡二叉树 | Python

# 110. 平衡二叉树---题目来源&#xff1a;力扣(LeetCode)[https://leetcode-cn.com/problems/balanced-binary-tree](https://leetcode-cn.com/problems/balanced-binary-tree)## 题目---给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。本题中&#xff0c;一棵高度…

「欧拉定理」学习笔记(费马小定理)

欧拉定理&#xff1a;对于互质的两个正整数$a, n$&#xff0c;满足$a^{φ(n)} ≡ 1\ (mod\ n)$ 证明&#xff1a; 设集合$S$包含所有$n$以内与$n$互质的数&#xff0c;共有$φ(n)$个&#xff1a;$$S \{ x_1, x_2, ..., x_{φ(n)} \} $$ 再设集合$T$&#xff1a;$$T \{ a * x…

Python将MySQL表数据写入excel

背景&#xff1a;将mysql表查询结果写入excel。 1.使用sqlyog工具将查询结果导出到Excel.xml中&#xff0c;用excel打开发现&#xff1a;因为text字段中有回车换行操作&#xff0c;显示结果行是乱的。 2.用mysql -uadmin -p -h -P -NBe"select * from tb;" >>a…

nacos动态配置数据源_Jasper 怎么配置动态数据源

Jasper 本身是不支持动态数据源的&#xff0c;能用的解决方式是通过 api 自定义数据源&#xff0c;实际操作就是根据条件判断后动态设定 jdbc 的 url、用户名及密码等连接属性。比如&#xff1a;String userName userDetails.getUsername();// obtain a connection based on t…

Linux命令之top

top –hv | -abcHimMsS –d delay –n iterations –p pid [, pid …] top程序提供运行系统的动态实时视图&#xff0c;它可以显示系统概要信息以及当前由Linux内核当前管理的任务列表。所示的系统概要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的&#…

seal report mysql_Seal Report开放数据库报表工具(.Net)

概述&#xff1a;开放数据库报表工具(.Net)简介&#xff1a;Seal-Report提供了一个完整的框架&#xff0c;用于从任何数据库生成日常报告和仪表板。Seal-Report是Microsoft .NET Framework完全用C&#xff03;编写的开源工具。Seal Report算是报表工具中比较好用的一个&#xf…