【CMU15-445 Part-14】Query Planning Optimization I

Part14-Query Planning & Optimization I

SQL is Declarative,只告诉想要什么而不需要说怎么做。

IBM System R是第一个实现query optimizer查询优化器的系统

  • Heuristics / Rules

    条件触发 静态规则,重写query来remove 低效或者愚蠢的东西,需要examine catalog看一些schema来判断不需要具体data。

  • Cost-based Search

    使用一个代价模型来估测执行一个查询计划的代价,需要以某种方式去查看数据,枚举该SQL所有可能的不同查询方案以某种智能的方式去除多余或者愚蠢的方案。

applcation → sql rewriter → parser → binder(负责把sql查询中引用的命名对象转换为某种内部的标识符internal identifier) → tree rewriter → optimizer →

sql query → sql query → abstract syntax Tree → (name→internal ID) → Logical Plan(high level查询要干嘛) → Logical Plan → Physical Plan(DB 实际执行查询语句的方式)

Untitled

Logical VS. Physical Plans

逻辑计划相当于查询中的关系代数表达式,比如查询计划树种包含了这些关系代数的符号,但是不会说具体要用哪种方式和算法。

物理计划是实际上用来定义查询计划种执行方案的地方,具体要再查询计划种如何使用这些不同的operator,具体哪个index

Query Optimization is NP-HARD


Relational Algebra Equivalences

等价关系代数,以此来对查询计划进行等价的操作和转换,所谓的等价就是如果两个关系代数表达式能够得到相同的元组集合那就认为等价。

Predicate Pushdown

filter before the join

Untitled

  • 尽可能早过滤
  • 重新排序 让最具有选择性地先进行过滤
  • 拆分复杂的predicate 然后push down

Untitled

Projection PushDown

尽早投影 以创建更小的tuple 减少中间结果,对行存比较关键,列存不重要。在join之前引入一个projection操作,减少列信息

Untitled

SELECT A1.*FROM A AS A1 JOIN A AS A2ON A1.id = A2.id;
# 等价于,中间做了个无意义的join
select * from A;
# 是不是可以用这样的例子来测试一个DB的查询优化

还可以忽略不必要的projections

select * from A AS A1where exists(select val from A AS A2where A1.id = A2.id);
# equal to
select * from A;

Merge Predicates

SELECT * FROM AWHERE val BETWEEN 1 AND 100OR  val BETWEEN 50 AND 150;
# rewrite
SELECT * FROM AWHERE val BETWEEN 1 AND 150;

查看catalog,比如写一个主键≠null或者写主键=null都会访问catalog 根据scheme进行rewrite

n-way join : 可能有 4 n 4^n 4n种,

Cost Estimation

一个查询需要多久

  • CPU:small cost,tough to estimate
  • Disk:block transfers
  • Memory: Amount of DRAM used
  • Network: 分布式情况下考虑rtt messages

真正知道物理代价只有通过去运行,但是代价太高,所以使用代价模型估测,而预估查询的成本是通过在内部维护表的相关信息来做的。

Statistic

internal statistic,维护索引、表、元组中的值的有关的元数据

Manual invocations:

  • pg/SQL LITE:ANALYZE
  • Oracle/Mysql: ANALYZE TABLE
  • SQL Server: UPDATE STATISTICS
  • DB2: RUNSTATS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu性能分析-ftrace 底层驱动

1、框架介绍 ftrace内核驱动可以分为几部分:ftrace framework,RingBuffer,debugfs,Tracepoint,各种Tracer。 ftrace框架是整个ftrace功能的纽带,包括对内和的修改,Tracer的注册,RingBuffer的控制等等。 RingBuffer是静态动态ftrace的载体。 debugfs则提供了用户空间…

Java基础---第八篇

系列文章目录 文章目录 系列文章目录一、a=a+b与a+=b有什么区别吗?二、try catch finally,try里有return,finally还执行么?三、Excption与Error包结构一、a=a+b与a+=b有什么区别吗? += 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果…

Python爬虫-requests.exceptions.SSLError: HTTPSConnectionPool疑难杂症解决(1)

前言 本文是该专栏的第7篇,后面会持续分享python爬虫案例干货,记得关注。 在爬虫项目开发中,偶尔可能会遇到SSL验证问题“requests.exceptions.SSLError: HTTPSConnectionPool(host=www.xxxxxx.com, port=443): Max retries exceeded with url ...”。亦或是验证之后的提示…

华为智能企业上网行为管理安全解决方案(1)

华为智能企业上网行为管理安全解决方案(1) 课程地址方案背景需求分析企业上网行为概述企业上网行为安全风险分析企业上网行为管理需求分析 方案设计组网架构设备选型设备简介行为管理要点分析方案功能概述 课程地址 本方案相关课程资源已在华为O3社区发…

【目标检测】——Gold-YOLO为啥能超过YOLOV8

华为 https://arxiv.org/pdf/2309.11331.pdf 文章的出发点:FPN中的信息传输问题 1. 简介 基于全局信息融合的概念,提出了一种新的收集和分发机制(GD),用于在YOLO中进行有效的信息交换。通过全局融合多层特征并将全局信…

【学习笔记】深度学习分布式系统

深度学习分布式系统 前言1. 数据并行:参数服务器2. 流水线并行:GPipe3. 张量并行:Megatron LM4. 切片并行:ZeRO5. 异步分布式:PATHWAYS总结参考链接 前言 最近跟着李沐老师的视频学习了深度学习分布式系统的发展。这里…

第5讲:v-if与v-show的使用方法及区别

v-if条件判断 v-if是条件渲染指令,它根据表达式的真假来删除和插入元素,它的基本语法如下: v-if “expression” expression是一个返回bool值的表达式,表达式可以是一个bool属性,也可以是一个返回bool的运算式 &#…

【从入门到起飞】JavaSE—Stream流

🎊专栏【JavaSE】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🥰欢迎并且感谢大家指出我的问题 文章目录 🍔Stream流的作用🍔Stream流的使用步骤🎄获取Strea…

WebSocket实现方式

1.安装组件channels pip install channels 2.注册app daphne INSTALLED_APPS [daphne, #channels4.0以后要引入channels, # 即时通信django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.mess…

基于css变量轻松实现网站的主题切换功能

我们经常看到一些网站都有主题切换,例如vue官方文档。那他是怎么实现的呢? 检查元素,发现点击切换时,html元素会动态的添加和移除一个class:dark,然后页面主题色就变了。仔细想想,这要是放在以前&#xff0…

电缆隧道在线监测系统:提升电力设施安全与效率的关键

随着城市化进程的加快,电力电缆隧道在保障城市电力供应方面的地位日益重要。然而,电缆隧道环境复杂,容易受到多种因素影响,如温度、湿度、烟雾、水位等,严重威胁电力设施的安全与稳定运行。在此背景下,电缆…

修改switch Nand无线区码 以支持高频5G 信道

环境:NS switch 问题:日版,港版无法连接大于44信道的5G WIFI 解决办法:修改PRODINFO.dec的WIFI 区域码 背景:我的switch是最早买的港版的一批,WIFI 只能连接日本的信道,家里的路由器是国行的&am…

国庆day1---消息队列实现进程之间通信方式代码,现象

snd&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)typedef struct{ long msgtype; //消息类型char data[1024]; //消息正文 }Msg;#define SIZE sizeof(Msg)-sizeof(long)int main…

释放潜力:人工智能对个性化学习的影响

人工智能有潜力通过使个性化学习成为一种实用且可扩展的方法来彻底改变教育。它使教育工作者能够满足每个学生的独特需求&#xff0c;促进参与并提高整体学习成果。然而&#xff0c;必须解决道德问题&#xff0c;并确保技术仍然是教育工作者手中的工具&#xff0c;为学生创造更…

What is a TCP SYN Flood DDoS Attack?

什么是TCP SYN洪水攻击&#xff1f; 传输控制协议 &#xff08;TCP&#xff09; 在发送方和接收方之间使用三向握手在它们之间建立可靠的 TCP 连接。 首先&#xff0c;想要与接收方建立连接的发送方使用同步序列号 &#xff08;SYN&#xff09; 向接收方发送数据段&#xff0c…

webpack:详解cache模块常用配置

背景 持久化缓存算得上是 Webpack 5 最令人振奋的特性之一&#xff0c;它能够将首次构建结果持久化到本地文件系统&#xff0c;在下次执行构建时跳过一系列解析、链接、编译等非常消耗性能的操作&#xff0c;直接复用 module、chunk 的构建结果。 cache 会在开发模式被设置成…

Mysql——三、SQL语句(上篇)

Mysql 一、SQL语句基础1、SQL简介2、SQL语句分类3、SQL语句的书写规范 二、数据库操作三、MySQL 字符集1、变量2、utf8和utf8mb4的区别 四、数据库对象五、SELECT语句1、简单的SELECT语句2、SQL函数2.1 聚合函数2.2 数值型函数2.3 字符串函数2.4 日期和时间函数2.5 流程控制函数…

云原生开发:从容器到微服务的全栈指南

文章目录 什么是云原生开发&#xff1f;1. 容器化2. 微服务架构 云原生开发的优势1. 可伸缩性2. 高可用性3. 灵活性4. 快速交付 云原生开发的1. 学习曲线2. 复杂性3. 运维挑战 云原生开发的最佳实践1. 自动化部署2. 监控和日志3. 安全性4. 弹性设计5. 文档和培训 未来展望结论 …

C++ 迭代器(iterator)

迭代器介绍 迭代器&#xff08;iterator&#xff09;&#xff1a;容器类型内置的“指针” - 使用迭代器可以访问某个元素&#xff0c;迭代器也能从一个元素移动到另一个元素。 - 有迭代器的类型都拥有 begin 和 end 成员- begin&#xff1a;返回指向第一个元素&#xff08;或字…

博客无限滚动加载(html、css、js)实现

介绍 这是一个简单实现了类似博客瀑布流加载功能的页面&#xff0c;使用html、css、js实现。简单易懂&#xff0c;值得学习借鉴。&#x1f44d; 演示地址&#xff1a;https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html 代码 index.html <!DOCT…