cmu15545笔记-查询优化(Query Optimization)

news/2024/11/19 15:37:49/文章来源:https://www.cnblogs.com/timothy020/p/18554953

目录
  • 概述
  • Heuristics / Rules
  • Cost-based Search
    • Single relation
    • Mutiple relation
      • Genertive / Bottom-Up
      • Transformation / Top-Down
    • Nested sub-queries
      • Decomposing Queries
      • Expression/Queries Rewriting
  • Statistics

概述

数据库系统的执行流程:

image-20241119110634550

从优化器到磁盘所设计的步骤:

imageimage

查询优化分为两类:

  1. Heuristics / Rules:启发式的,基于规则的
  2. Cost-based Search:基于代价模型。选择代价最小的路径
    1. Single relation:单表
    2. Multiple relation:多表。Bottom-Up或Top-Down
    3. Nested sub-queries:嵌套子查询。重写,分解。

Heuristics / Rules

基本思想:关系代数的等价变换。

谓词下推,投影替代笛卡尔积,投影下推(下图没体现)。

image-20241119121200785

查询优化是NP难问题,因此我们无法穷尽所有查询计划,只能选取部分子集,同时无法准确计算代价,只能进行估计:

  • 逻辑代价:谓词选择性,操作符或算法的逻辑复杂度,中间结果大小

  • 物理代价:IO代价,CPU代价,内存使用,数据分布和存储结构

  • 代价的计算来自于统计数据:直方图,快照,采样

  • 搜索方式:Bottom-Top和Top-Down

统计数据 -> 逻辑代价 -> 物理代价 -> 搜索物理代价最小的计划。

结束条件:找到当前所有查询计划中代价最小的一个 或 到达限定时间。

Single relation

对于单表操作来说,简单的启发式优化(Heuristics)+对谓词合理排序往往已经足够了,只需要考虑选择哪种数据库访问方式。

  • 全表扫描
  • 二分查找(聚簇索引)
  • 索引扫描
SELECT * 
FROM Employees 
WHERE age > 40 AND department = 'IT';

该SQL中,age > 40的选择性为0.1,department = 'IT'为0.9。

  • 两个都有索引:分别进行索引扫描过滤,结果取交集。
  • 一个有索引(如age):对age进行索引扫描,得到age>40的数据,再用department = 'IT'对结果进行过滤。
  • 都没有索引:全表扫描,用两个条件过滤得到最终结果。

Mutiple relation

Genertive / Bottom-Up

基本思想:通过从最小的数据子集(如单个表或中间结果)开始,逐步合并这些子集,并使用动态规划技术找到整个查询的最优执行计划。

数据库:IBM System R,,DB2,MySQL,Postgres,most open-source DBMSs

例子:IBM System R

  1. 确定表数据访问方式,列出可能的连接方式

image-20241119145002129

  1. 搜索最小代价:动态规划+剪枝
imageimage
imageimage

![image-20241119145258994](/Users/iven/Library/Application Support/typora-user-images/image-20241119145258994.png)

Transformation / Top-Down

基本思想:从逻辑查询计划出发,利用分支界限法,逐步转换为物理查询计划,在搜索空间中保留最优方案,同时在规划过程中直接考虑数据的物理属性。

数据库:MSSQL, Greenplum, CockroachDB

存在强制规则(enforer)进行约束,如果不满足就直接剪枝,强制规则可以是一个接受的成本底线,或者是禁用的操作,比如在需要有序结果时却采用Hash Join。

image-20241119150055670

Nested sub-queries

Decomposing Queries

基本思想:嵌套的子查询如果与外部查询无关,分解成一个单独的查询。

![image-20241119150608999](/Users/iven/Library/Application Support/typora-user-images/image-20241119150608999.png)

Expression/Queries Rewriting

基本思想:对查询或表达式进行同义替换。

SELECT * FROM A WHERE 1 = 0; -> false
SELECT * FROM A WHERE NOW() IS NULL; -> false
SELECT * FROM A WHERE false; -> 不做查询SELECT * FROM A
WHERE val BETWEEN 1 AND 100OR val BETWEEN 50 AND 150; -> Where val BETWEEN 1 AND 150
SELECT name FROM sailors AS S
WHERE EXISTS (SELECT * FROM reserves AS RWHERE S.sid = R.sidAND R.day = '2022-10-25'
); -> 
SELECT name FROM sailors AS S, reserves AS R
WHERE S.sid = R.sidAND R.day = '2022-10-25'

Statistics

数据库会在内部的数据目录(Data Catalog)中存储关于表,属性,索引的统计信息(Statistics),不同的系统会在不同的时间更新。

手动调用:

  • Postgres/SQLite:ANALYZE
  • Oracle/MySQL:ANALYZE TABLE
  • SQL Server:UPDATE STATISTICS
  • DB2:RUNSTATS

直方图(histogram):等宽直方图;等深直方图

image-20241119152252673

image-20241119152507457

快照(sketch):是一种轻量级的近似统计工具,适合在大数据和实时流场景下使用。

  • 相比直方图,能够动态适应数据变化,并显著降低存储和计算成本。
  • 在选择性估计中,快照可以有效提高数据库优化的效率,特别是对于高维和动态数据。

采样(sampling):数据规模大时,可以根据样本预估选择性。

image-20241119153128691

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

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

相关文章

构建企业级数据分析 Agent:架构设计与实现

引言 数据分析 Agent 是现代企业数据栈中的重要组件,它能够自动化数据分析流程,提供智能化的数据洞察。1. 数据处理工具链设计 数据处理工具链是整个分析系统的基础设施,它决定了系统处理数据的能力和效率。一个优秀的工具链设计应该具备:良好的可扩展性:能够轻松添加新的数据…

空间计算、物理计算、实时仿真与创造拥有「自主行为」的小狗 | 播客《编码人声》

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。虚拟世界与现实世界的界限逐渐模糊,已然成为不争的事实。但究竟哪些曾经的幻想已然照进现实,又有哪些挑战依然横亘眼…

ABB机械手维修-运动控制

ABB机械手运动控制ABB机械手的运动控制主要通过其先进的控制系统实现。ABB机械手具有多种运动模式,包括单轴运动、线性运动和重定位运动。在进行手动操纵前,需要将工作模式档位切换至手动减速模式。 - 单轴运动:也称为关节运动,是对机器人的各个关节轴进行单独控制移动操作…

不可思议!7、8 年外包进了国企!!

大家好,我是R哥。 今天分享一个非常「难以置信」的辅导案例,一个「双非二本」的兄弟从毕业就开始干外包,一直干了 7、8 年外包,从外包离职后,经过我们几个月的面试辅导,最终去了某国企,还是待遇最好的 10 家国企之一。 这兄弟是 5 月份加入面试辅导的,距离他离职已经个…

制造业怎么用好仓库管理系统?仓库管理系统在制造业中的应用实例

随着科技的发展,制造企业对仓库管理的要求也越来越高。大家都在想,怎么能用智能化、自动化的方法来提高仓库的工作效率,减少库存积压,同时让客户更满意。这可是企业发展的一个很关键的问题。这篇文章会通过几个实际的例子,详细讲讲WMS在制造业里是怎么发挥作用的。目的就是…

如何快速推进项目?这些企业用了哪些项目管理工具?

在当今复杂的商业环境中,项目管理不仅仅是管理任务和时间的工具,它已经成为推动团队协作、提升企业执行力以及实现战略目标的核心环节。随着数字化转型的推进,越来越多的企业和团队开始借助智能化的项目管理软件来优化资源配置、提升工作效率、降低风险,最终实现项目的成功…

单变量微积分学习笔记:函数图像的伸缩变换(15)

平移 x:左加右减y:上加下减伸缩\(af(bx+c)+d\) \(x_2=bx+c\),相当于 \(x\) 轴变为原来的 \(\frac{1}{b}\) 后再向左移动 \(c\) \(x=\frac{x_2-c}{b}\) \(y_2=ay+d\),相当于 \(y\) 轴变为原来的 \(\frac{1}{a}\) 后再向上移动 \(d\) \(y=\frac{y_2-d}{c}\)

设置数据库环境变量 win10

方法 1: 使用系统设置界面打开系统属性:在桌面上,右键点击“此电脑”或“我的电脑”,选择“属性”。 在打开的窗口中,点击“高级系统设置”。打开环境变量设置:在“系统属性”窗口中,点击“高级”选项卡下的“环境变量”按钮。设置环境变量:在“环境变量”窗口中,你会看…

小程序开发遇到的问题

真机调试转发给朋友图片加载会失败的问题 在开发工具中分享页面时,图片正常,体验版或手机真机调试时,图片加载失败。电脑上正常,手机上加载失败。 原因是图片的文稿类型为AV1,很多移动设备可能不支持 AV1 解码。 解决办法: 更换为文稿类型为JPEG的图片,图片格式可以是jpg…

用户登录-路由和权限校验

绿色框框是前端,黄色框框是后端。一开始不存在token,若路由存在白名单中,比如login页面,此时会将app.vue中的替换成 login 组件。因为我们在路由中定义了login组件。👆 login/index 动态路由原理 去看文档当中的相应内容。 路由重定向原理 面包屑导航如果只是简单的页面切…

刀片计算机设计方案:192-6U VPX i7 刀片计算机

一、产品概述 该产品是一款基于第三代Intel i7双核四线程(或四核八线程)的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道,其中P1,P2各支持4个PCIe x4 Gen3总线接口。该产品具有很强的扩展性,可以很好满足多负载多节点的应用需求。 产品…

python调用C#的dll

1、使用VisualStudio建立C#的dll项目 2、编写C#代码生成dll库 3、安装pythonnet 库用于调用C#的dllpip install pythonnet4、编写python代码import clr # 引入 clr 模块,它是 pythonnet 提供的 import sys# 添加 C# DLL 所在的目录 sys.path.append(rCsharp_dll_test.dll)# …