动手学大数据-2常见的查询优化器

news2025/1/18 6:30:21

目录

什么是查询优化器

查询优化器分类 

 Top-downOptimizer

Bottom-upOptimizer

RBO-关系代数  

RBO-优化原则 

RBO-列裁剪

 RBO-谓词下推

RBO-传递闭包 

RBO-RuntimeFilter

小结 

CBO(Cost-basedOptimizer)

概念 

CBO-统计信息 

CBO-统计信息的收集方式 

CBO-统计信息推导规则 

CBO-统计信息的问题 

CBO-执行计划枚举

CBO执行计划枚举-动态规划 ​编辑

 CBO效果-TPC-DSQ25

CBO效果-TPC-DS 

CBO小结 

小结


什么是查询优化器

前面我们说到了查询的流程:

语法分析:检查SQL拼写和语法是否有问题。

语义检查:检查SQL语句中的访问对象是否存在,即表名、列名啥的;

经过语法分析和语义检查无误之后,就会生成一棵语法分析树,进行优化器优化,生成查询计划。

所以,查询优化器的目标就是找到当前SQL查询的最佳执行计划(或者说查询树),它是由一系列物理操作符组成,这些操作符按照一定的运算关系组成查询的执行计划。

而在查询优化器中,可以分为逻辑优化阶段和物理优化阶段。
 

逻辑优化,就是通过改变SQL语句的内容来使得查询更加高效,并为物理优化阶段提供更多的候选执行计划。

那逻辑优化是如何改变SQL语句的内容呢?

通常采用的方式是对SQL语句进行等价变换,(基于关系代数)做查询重写。比如说,对条件表达式做等价谓词重写、条件简化,对视图进行重写,对子查询进行优化,对连接语义进行外连接消除、嵌套连接消除等。

逻辑优化中的每一步都对应着物理计算,因此逻辑优化阶段输出若干候选执行计划之后,物理优化阶段会计算这些计划的代价,从中选择代价最小的作为执行计划。

因此逻辑优化属于语法层级的优化,而物理优化实际上是一种依据代价的估算模型,相当于是从连接路径中选择代价最小的路径,因此属于物理层面的优化。

查询优化器分类 

 Top-downOptimizer

从目标输出开始,由上往下遍历计划树,找到完整的最优执行计划

例子:Volcano/Cascade,SQLServer

Bottom-upOptimizer

从零开始,由下往上遍历计划树,找到完整的执行计划

例子:SystemR,PostgreSQL,IBMDB2

Rule-basedOptimizer(RBO)

根据关系代数等价语义,重写查询

基于启发式规则会访问表的元信息(catalog),不会涉及具体的表数据(data)

Cost-basedOptimizer(CBO)

使用一个模型估算执行计划的代价,选择代价最小的执行计划 

RBO-关系代数  

RBO: Rule-Based Optimization也即“基于规则的优化器”,该优化器按照硬编码在数据库中的一系列规则来决定SQL的执行计划。

以Oracle数据库为例,RBO根据Oracle指定的优先顺序规则,对指定的表进行执行计划的选择。比如在规则中:索引的优先级大于全表扫描。

通过Oracle的这个例子我们可以感受到,在RBO中,有着一套严格的使用规则,只要你按照规则去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说RBO对数据不“敏感”。这就要求开发人员非常了解RBO的各项细则,不熟悉规则的开发人员写出来的SQL性能可能非常差。

但在实际的过程中,数据的量级会严重影响同样SQL的性能,这也是RBO的缺陷所在。毕竟规则是死的,数据是变化的,所以RBO生成的执行计划往往是不可靠的,不是最优的。

变为: 

RBO-优化原则 

Readdatalessandfaster(I/O)

Transferdatalessandfaster(Network)

Processdatalessandfaster(CPU&Memory) 

优化前的逻辑计划:

下面给出四个优化规则: 

RBO-列裁剪

 

对应的算子有没用到的列,实际中就去掉这些列,这样就减少复杂度 

 RBO-谓词下推

尽早地过滤数据,也就是提前将id>123的数据过滤出来了,也会减少复杂度 

RBO-传递闭包 

根据表达式子中的pv.userId = user.id条件,其实可以推出 pv.userId也是可以筛选出大于123的数据 

 

RBO-RuntimeFilter

 

小结 

 

CBO(Cost-basedOptimizer)

概念 

使用一个模型估算执行计划的代价,选择代价最小的执行计划

执行计划的代价等于所有算子的执行代价之和

通过RBO得到(所有)可能的等价执行计划

算子代价:CPU,内存,磁盘I/O,网络I/O等代价

和算子输入数据的统计信息有关:输入、输出结果的行数,每行大小...

叶子算子Scan:通过统计原始表数据得到

中间算子:根据一定的推导规则,从下层算子的统计信息推导得到

和具体的算子类型,以及算子的物理实现有关

例子:SparkJoin算子代价=weight*row_count+(1.0-weight)*size 

 

CBO-统计信息 

原始表统计信息

表或者分区级别:行数、行平均大小、表在磁盘中占用了多少字节等

列级别:min、max、numnulls、numnotnulls、numdistinctvalue(NDV)、histogram等

推导统计信息

        选择率(selectivity):对于某一个过滤条件,查询会从表中返回多大比例的数据

        基数(cardinality):在查询计划中常指算子需要处理的行数 

 

CBO-统计信息的收集方式 

在DDL里指定需要收集的统计信息,数据库会在数据写入时收集或者更新统计信息

手动执行explainanalyzestatement,触发数据库收集或者更新统计信息 

 

动态采样 

CBO-统计信息推导规则 

 假设列和列之间是独立的,列的值是均匀分布

 

CBO-统计信息的问题 

假设列和列之间是独立的,列的值是均匀分布 -->这个假设经常与现实不符 

 

CBO-执行计划枚举

 

通常使用贪心算法或者动态规划选出最优的执行计划 

CBO执行计划枚举-动态规划 

 

 

 

 

 

 

 CBO效果-TPC-DSQ25

 

 

 

CBO效果-TPC-DS 

 

 

CBO小结 

 CBO使用代价模型和统计信息估算执行计划的代价

CBO使用贪心或者动态规划算法寻找最优执行计划

在大数据场景下CBO对查询性能非常重要

小结

主流RBO实现一般都有几百条基于经验归纳得到的优化规则

RBO实现简单,优化速度快

RBO不保证得到最优的执行计划

CBO使用代价模型和统计信息估算执行计划的代价

CBO使用贪心或者动态规划算法寻找最优执行计划

大数据场景下CBO对查询性能非常重要 

 

 

 

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

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

相关文章

ctfshow复现2024ciscn第一场web

2024ciscn第一场 本章内容均在ctfshow复现 图片若显示失败请参考我的blog👇 ddl08.github.io sanic python污染 源码 from sanic import Sanic from sanic.response import text, html from sanic_session import Session import pydash # pydash5.1.2 ​ ​…

Java快速入门之数组、方法

一、数组 1、数组的概念: 数组指的是一种容器,可以用来存储同种数据类型的多个值,但是数组容器在存储数据的时候,需要结合隐式转换考虑。 例如: 定义了一个int类型的数组,那么boolean、double类型的数据是…

STM32 FreeRTOS任务通知

目录 任务通知的简介 任务通知相关API函数介绍 任务通知的简介 任务通知是 FreeRTOS 中一种用于任务间通信的机制,它允许一个任务向其他任务发送简单的通知或信号,以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组,提…

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯,如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。 怎么恢复Chrome 之前版本&a…

前端实习第二个月小结

时间飞快,第一次实习已经过去两个多月,作一些简单的总结和分享。 注:文章整体会比较轻松,提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务,技术栈:前端re…

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数…

flutter的web页面

有几个服务器 有几个后台 直接通过web端进去虽然说很方便,但… 于是把web页面镶嵌到应用里面去, 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了,活的列表可以通过io去获取 import package:flutter/material.dart; imp…

【Rust自学】13.1. 闭包 Pt.1:什么是闭包、如何使用闭包

13.1.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…

安装 fairseq 失败

git clone https://github.com/pytorch/fairseq cd fairseq pip install --editable ./ 出现错误 解决方法: pip install pip24.0 参考:https://github.com/SociallyIneptWeeb/AICoverGen/issues/133 gcc 和 g 需要 9.0以上,怎么安装可以…

解决conda create速度过慢的问题

问题 构建了docker容器 想在容器中创建conda环境,但是conda create的时候速度一直很慢 解决办法 宿主机安装的是anaconda 能正常conda create,容器里安装的是miniforge conda create的时候速度一直很慢,因为容器和宿主机共享网络了,宿主机…

AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发

AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发,指的是首先进行数据分析,比如统计学分析、机器学习模型的构建等,然后将分析的流程开发成数据分析类的工具,或者将数据分…

Web 浏览器轻松访问和管理 SSH 与 Telnet 服务

前几天也分享了一篇类似的文章,但是有朋友反馈不太安全,如果有个输入密码后访问最好,然后我就找了一下发现了这个更加优秀的项目, sshwifty是一个开源项目,它允许用户通过浏览器进行 SSH 和 Telnet 操作。这个项目提供…

Python制作简易PDF查看工具PDFViewerV1.0

PDFViewer PDF浏览工具,Python自制PDF查看工具,可实现基本翻页浏览功能,其它功能在进一步开发完善当中,如果有想一起开发的朋友,可以留言。本软件完全免费,自由使用。 软件界面简洁,有菜单栏、…

Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 比赛信息管理 看板展示 系统管理 摘要 本文使用Python与…

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

如何利用SAP官方提供的渠道学习(SAP Help Portal)

首先进入地址 https://help.sap.com/docs/ 然后输入关键词 选择语言 然后就可以浏览自己想看的内容啦

【JavaEE进阶】实现简单的加法计算器和用户登录

目录 🎍序言 🌳加法计算器 🚩准备工作 🚩约定前后端交互接口 🚩后端服务器代码的书写 🌴用户登录 🚩准备工作 🚩约定前后端交互接口 🏀需求分析 🏀…

2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形

美丽的图形 编程实现美丽的图形具体要求: 1)点击绿旗,角色在舞台中心,如图所示; 2)1秒后,绘制一个边长为 140的红色大正方形,线条粗细为 3,正方形的中心为舞台中心,如图所示; 完整题目可点击下…

西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】

AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…

搜维尔科技提供完整的人形机器人解决方案以及训练系统

问题:从灵巧手收集的数据是否也会在大脑大模型中训练,或是在专门用于手部控制的单独模型中训练? Q: If the data collected from dexterous hands will be trained as well in the brain large model, or in a separate model dedicated for…