CMU 15-445 -- Query Optimization - 10

news2024/11/29 23:56:25

CMU 15-445 -- Query Optimization - 10

  • 引言
  • Query Optimization Techniques
  • Query Rewriting
    • Predicate Pushdown
    • Projections Pushdown
  • Cost-based Search
    • Cost Estimation
    • Statistics
      • Equality Predicate
      • Range Predicate
      • Negation Query
      • Conjunction Query
      • Disjunction Query
      • Joins
      • 直方图
      • Samling
      • 成本估算小结
  • 选择最佳的访问方法
    • QLTP查询计划
    • 多关系查询规划
      • 动态规划在连接成本分析中的应用
      • 如何为查询生成执行计划
    • 嵌套查询
  • 小结


引言

本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅隆] 课程重点知识点摘录,附加个人拙见,同样借助CMU 15-445课程内容来完成MIT 6.830 lab内容。


SQL 语句让我们能够描述想要获取的数据,而 DBMS 负责来根据用户的需求来制定高效的查询计划。不同的查询计划的效率可能出现多个数量级的差别,如 Join Algorithms 一节中的 Simple Nested Loop Join 与 Hash Join 的时间对比 (1.3 hours vs. 0.45 seconds)。

Query Optimizer 第一次出现在 IBM System R,那时人们认为 DBMS 指定的查询计划永远无法比人类指定的更好。System R 的 optimizer 中的一些理念至今仍在使用。


Query Optimization Techniques

Heuristics/Rules

  • Rewrite the query to remove stupid/inefficient things
  • Does not require a cost model

Cost-based Search

  • Use a cost model to evaluate multiple equivalent plans and pick the one with the lowest cost

在这里插入图片描述
这里的 Rewriter 负责 Heuristics/Rules,Optimizer 则负责 Cost-based Search。


Query Rewriting

如果两个关系代数表达式 (Relational Algebra Expressions) 如果能产生相同的 tuple 集合,我们就称二者等价。DBMS 可以通过一些 Heuristics/Rules 来将关系几何表达式转化成成本更低的等价表达式,从而达到查询优化的目的。这些规则通常试用于所有查询,如:

  • Predicate Pushdown(谓词下推): Predicate Pushdown指的是将查询中的谓词操作尽早地推送到数据源或存储引擎进行执行,以减少处理的数据量。通常,在数据库查询中,谓词操作用于筛选出满足特定条件的数据行。谓词下推的目的是在查询执行之前尽早地应用谓词,减少查询的数据集大小,从而提高查询的效率。
    • 例如,如果一个查询包含多个谓词条件(如WHERE子句),谓词下推会尽可能早地将这些条件下推到存储引擎执行,以减少返回给查询引擎的数据量。这样可以减少IO和计算开销,并提高查询性能。
  • Projections Pushdown (投影下推):Projections Pushdown指的是将查询中的投影操作尽早地推送到数据源或存储引擎进行执行,以减少返回给查询引擎的数据量。在数据库查询中,投影操作用于指定需要返回的列或字段。投影下推的目的是在查询执行之前尽早地应用投影操作,减少返回的数据列数量,从而降低数据传输和存储开销。
    • 例如,如果一个查询只需要返回特定的列数据,而数据源可能包含更多的列,投影下推会尽早地将投影操作下推到存储引擎执行,以便只返回所需的列数据,避免传输和处理不必要的数据。

Predicate Pushdown

Predicate 通常有很高的选择性,可以过滤掉许多无用的数据。将 Predicate 推到查询计划的底部,可以在查询开始时就更多地过滤数据,举例如下:

在这里插入图片描述
在这里插入图片描述
核心思想如下:

  • 越早过滤越多数据越好
  • 重排 predicates,使得选择性大的排前面,选择性大指的是能够更有效地筛选出所需数据行的谓词,使得DBMS能够更早地过滤掉不相关的数据,从而提高查询性能
  • 将复杂的 predicate 拆分,然后往下压,如 X=Y AND Y=3 可以修改成 X=3 AND Y=3

Projections Pushdown

本方案对列存储数据库不适用。在行存储数据库中,越早过滤掉不用的字段越好,因此将 Projections 操作往查询计划底部推也能够缩小中间结果占用的空间大小,举例如下:

在这里插入图片描述


Cost-based Search

除了 Predicates 和 Projections 以外,许多操作没有通用的规则,如 Join:Join 操作既符合交换律又符合结合律,等价关系代数表达式数量庞大,这时候就需要一些成本估算技术,将过滤性大的表作为 Outer Table,小的作为 Inner Table,从而达到查询优化的目的。

Cost Estimation

一个查询需要花费多长时间,取决于许多因素

  • CPU: Small cost; tough to estimate
  • Disk: #block transfers
  • Memory: Amount of DRAM used
  • Network: #messages

但本质上取决于:整个查询过程需要读入和写出多少 tuples

因此 DBMS 需要保存每个 table 的一些统计信息,如 attributes、indexes 等信息,有助于估计查询成本。值得一提的是,不同的 DBMS 的搜集、更新统计信息的策略不同。


Statistics

通常,DBMS 对任意的 table R,都保存着以下信息:
在这里插入图片描述

利用上面两条数据,可以得到 selection cardinality,即 R 中 A 属性下每个值的平均记录个数:
在这里插入图片描述

需要注意的是,这种估计假设 R 中所有数据在 A 属性下均匀分布 (data uniformity)。

利用以上信息和假设,DBMS 可以估计不同 predicates 的 selectivity:

  • Equality
  • Range
  • Negation
  • Conjunction
  • Disjunction

Equality Predicate

SELECT * FROM people WHERE age = 2;

在这里插入图片描述
在这里插入图片描述

Range Predicate

SELECT * FROM people WHERE age >= 2;

在这里插入图片描述
在这里插入图片描述

Negation Query

SELECT * FROM people WHERE age != 2;

利用 equality query 可以反向推导出 negation query 的情况:
在这里插入图片描述

在这里插入图片描述

实际上这里所谓的 Selectivity 就是基于 uniformly distribution 假设下的 Probability。


Conjunction Query

SELECT * FROM people WHERE age = 2 AND name LIKE 'A%';

若假设两个 predicates 之间相互独立,则可以推导出:

在这里插入图片描述
其韦恩图如下所示:
在这里插入图片描述


Disjunction Query

SELECT * FROM people
 WHERE age = 2
    OR name LIKE 'A%';

若假设两个 predicates 之间相互独立,则可以推导出:
在这里插入图片描述
其韦恩图如下所示:
在这里插入图片描述


Joins

在这里插入图片描述


直方图

我们的公式是很好的,但是我们假设数据值是均匀分布的:
在这里插入图片描述
正常情况下,数据分布是不均匀的:
在这里插入图片描述
通过直方图(IntHistogram类)来计算选择性是通过以下步骤实现的:

  1. 数据收集:首先,需要收集统计信息来构建直方图。对于给定的列或属性,收集该列的数据值,并确定最小值和最大值。

  2. 桶的划分:根据收集到的最小值和最大值,将数据范围划分为多个桶(或区间)。桶的数量和大小可以根据具体需求进行调整。

  3. 数据分配:将数据值分配到相应的桶中。每个数据值都被映射到与其所属区间对应的桶中。

  4. 桶计数:在每个桶中,记录该桶中包含的数据值数量。

  5. 计算选择性:根据直方图中每个桶的计数值,计算选择性。选择性通常通过以下公式计算:选择性 = 1 / 桶中的数据值数量。

在这里插入图片描述
在这里插入图片描述
通过直方图中各个桶中的数据值数量,可以估计出特定值或谓词选择的概率。具有更多数据值的桶通常具有较低的选择性,而具有较少数据值的桶通常具有较高的选择性。

请注意,选择性估计是基于对数据分布的假设和直方图的统计信息。对于非均匀分布或包含离群值的数据集,选择性估计可能会有一定的误差。因此,在进行查询优化时,需要综合考虑其他因素和优化技术。


Samling

现代 DBMSs 也会使用采样技术来降低成本估计本身的成本,比如面对如下查询:

SELECT AVG(age)
FROM people
  WHERE age > 50;

我们可以等间隔从表中对数据采样:
在这里插入图片描述
然后再估计:
在这里插入图片描述

当然,为了避免重复采样,DMBS 会保存一份采样表,待 table 的变动较大时,再更新采样表。


成本估算小结

现在我们可以(大致)估计谓词的选择性,那么我们实际上可以用它们做什么呢?

  1. 查询优化:利用谓词选择性的估计值,查询优化器可以选择最高效的查询执行计划。通过了解谓词的选择性,优化器可以估计中间结果的大小,并选择最佳的连接顺序、连接算法和访问方法。

  2. 索引选择:选择性估计有助于确定用于查询的最有效索引。通过将谓词的选择性与索引的基数进行比较,我们可以确定可能提供最佳查询性能的索引。

  3. 连接顺序优化:选择性估计有助于确定查询中多个表的最佳连接顺序。通过估计连接谓词的选择性,优化器可以评估不同的连接顺序排列并选择估计成本最低的一个。

  4. 资源分配:选择性估计可以辅助资源分配决策。例如,如果谓词的选择性很高,表示符合条件的行数较少,系统可以为处理查询的这部分分配较少的资源。

在进行基于规则的重写之后,数据库管理系统(DBMS)将为查询枚举不同的计划并估算它们的成本:

  • 单个关系。
  • 多个关系。
  • 嵌套子查询。
    在枚举所有计划或达到某个超时时间后,DBMS会选择对查询来说最佳的计划。

选择最佳的访问方法

  • 顺序扫描
  • 二分搜索(聚集索引)
  • 索引扫描

简单的启发式方法通常足够处理这个任务。

QLTP查询计划

对于OLTP查询来说,选择最佳访问方法相对容易,因为它们是可搜索谓词(sargable):

  • 可搜索谓词(Search Argument Able)
  • 通常只需选择最佳索引
  • 连接几乎总是在具有小基数的外键关系上进行
  • 可以使用简单的启发式方法实现

多关系查询规划

多关系查询规划(Multi-Relation Query Planning)是指在执行涉及多个关系(表)的查询时进行的规划过程。这个过程包括选择适当的连接顺序、连接算法和访问方法,以生成最优的查询执行计划。

随着连接数量的增加,可供选择的备选计划数量迅速增长:

  • 我们需要限制搜索空间。

System R中的基本决策:只考虑左深连接树。

  • 现代数据库管理系统不再总是做出这种假设。

在这里插入图片描述
左深连接树是一种连接顺序,其中每个连接操作的右侧表是前一个连接操作的结果。这种限制连接顺序的方式有助于简化查询优化的任务,并降低了计划搜索的复杂性。

通过限制为左深连接树,查询优化器可以避免对所有可能的连接顺序进行枚举和计算,从而减少了查询优化的时间和计算成本。此外,左深连接树的特性也使得查询计划的生成和优化更加高效。

基于左深连接树的查询规划在某些情况下可以实现完全流水线化的计划,其中中间结果不需要写入临时文件:

  • 并非所有左深连接树都可以实现完全流水线化。
  • 某些情况下,连接操作的输入数据可能需要在中间阶段进行排序或分组,以满足连接操作的要求。这可能需要使用临时文件或临时表来存储中间结果,以便进行排序或分组操作。

动态规划在连接成本分析中的应用

对于每个表,枚举连接操作的顺序:

  • 例如:左深连接树#1,左深连接树#2…

对于每个操作符,枚举计划:

  • 例如:哈希连接,排序-合并连接,嵌套循环连接…

对于每个表格,枚举访问路径:

  • 例如:索引#1,索引#2,顺序扫描…

在查询优化过程中,为了选择最佳的查询执行计划,需要枚举不同的连接顺序、操作符的计划和表格的访问路径。通过枚举不同的选择,可以比较它们的成本并选择最优的执行计划。

为了降低计划枚举的复杂性和避免重复的成本估计,动态规划被广泛应用于查询优化。动态规划技术可以利用之前计算过的成本估计结果,通过存储和重用中间计算结果,避免重复的计算,从而减少计算成本和时间。

通过使用动态规划,查询优化器可以有效地探索不同的连接顺序、操作符计划和表格访问路径的组合,以选择最佳的执行计划,并在优化过程中降低计算成本和复杂性。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


如何为查询生成执行计划

如何生成搜索算法的计划:

  • 枚举关系顺序
    在这里插入图片描述在这里插入图片描述

立即剪除包含交叉连接的计划!

  • 枚举连接算法选择
    在这里插入图片描述
    在这里插入图片描述

  • 枚举访问方法选择
    在这里插入图片描述

现实中的数据库管理系统并不按照这种方式进行计划生成。

实际情况更加复杂…


嵌套查询

数据库管理系统(DBMS)将嵌套子查询在WHERE子句中视为接受参数并返回单个值或一组值的函数。

有两种处理方式:

  • 重写以去关联化和/或扁平化嵌套子查询

在这里插入图片描述

  • 分解嵌套查询并将结果存储到临时表中

在这里插入图片描述
对于更复杂的查询,优化器将查询分解为多个块,并集中处理一个块。子查询被写入临时表中,在查询完成后临时表会被丢弃。

在这里插入图片描述


小结

查询优化确实是数据库管理系统中的一个具有挑战性的任务。为了实现高效的查询处理,采用了多种技术和策略。以下是其中一些技术:

  1. 尽早进行过滤:该策略涉及在查询执行过程中尽早应用过滤条件和谓词。通过在早期减少需要处理的行数,可以显著提高性能。

  2. 选择性估计:估计谓词的选择性有助于优化器确定查询的最佳执行计划。选择性指的是满足给定谓词的行的百分比。准确的选择性估计有助于选择最有效的连接顺序和访问方法。

  3. 均匀性:均匀性假设认为列内的数据分布是均匀的。该假设允许优化器根据数据的统计属性做出决策。

  4. 独立性:独立性假设认为查询中的谓词相互独立。该假设通过允许优化器单独估计选择性和评估谓词来简化优化过程。

  5. 直方图:直方图提供了列内数据分布的统计摘要,使优化器能够更准确地估计选择性。

  6. 连接选择性:连接选择性指的是连接操作产生的行数估计。它帮助优化器确定最有效的连接顺序和连接算法。

  7. 动态规划用于连接顺序:动态规划技术可用于探索和评估不同的连接顺序。这使得优化器能够基于成本估计找到最优的连接策略。

  8. 重写嵌套查询:有时可以将嵌套查询重写为更高效的等效形式。通过转换嵌套查询,优化器可以找到更好的执行计划。

查询优化是一个复杂且资源密集型的过程,涉及基于成本估计和数据的统计属性做出决策。数据库管理系统采用了各种技术来提高查询性能,但对于所有查询实现最佳性能是一项具有挑战性的任务。

本节对应教材PDF

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

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

相关文章

山西电力市场日前价格预测【2023-07-19】

日前价格预测 预测明日(2023-07-19)山西电力市场全天平均日前电价为362.73元/MWh。其中,最高日前电价为395.74元/MWh,预计出现在06: 00。最低日前电价为316.17元/MWh,预计出现在13: 45。 价差方向预测 1:实…

ES6标准下在if中进行函数声明

ES5中规定,函数只能在顶层作用域或函数作用域之中声明,不能在块级作用域声明。 // 情况一 if (true) {function f() {} }// 情况二 try {function f() {} } catch(e) {// ... }上面两种函数声明,根据 ES5 的规定都是非法的。但是&#xff0c…

win10 host 配置不生效 浏览器访问无效

遇到了一个比较坑的问题,host配置不生效。电脑是win10,排查了一个小时,刚开始我先排查编码是否有问题,然后又排查是不是权限的问题,经过我的修改编码和权限还是有问题,也查看了一些博客也没找到跟我出现一样…

从零搭建vue+electron桌面应用

从零搭建vueelectron桌面应用 一、准备工作1.全局下载electron2.全局下载vue脚手架3.创建vue项目(这里用的是vue2版本)4.安装打包插件5.安装electron-builder,安装后可以直接生成主进程的配置文件6.在vue.config.js中添加以下配置 二、运行项…

SpringCloud(五)Gateway 路由网关

一、路由网关 官网地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ 我们需要连接互联网,那么就需要将手机或是电脑连接到家里的路由器才可以,而路由器则连接光猫,光猫再通过光纤连接到互联网&a…

Linux 的远程唤醒

Linux (Ubuntu、Debian、Centos …) 的远程唤醒 环境说明: 两台局域网内的 linux 主机,本环境的系统为 loongnix 目的主机为:IP 192.168.12.11 MAC 86:d8:60:47:28:22远程主机为:IP 192.168.12.15 一、唤醒准备工作 (目的机上操…

Sentinel限流--流控模式与限流效果

文章目录 1、簇点链路2、流控入门案例3、流控模式:关联模式4、流控模式:链路模式5、流控效果:warm up6、限流效果:排队等待7、热点参数限流 1、簇点链路 簇点链路就是项目内的调用链路(controller -> servcie ->…

python-在transformers的问答模型中使用中文

先安装transformers在huggingface下载模型 模型bert-multi-cased-finetuned-xquadv1可以从huggingface中下载,具体操作方法可以参照文章https://blog.csdn.net/zhaomengsen/article/details/130616837下载 git clone就可以了然后使用pipline加载模型 from transfor…

【卫朋】华为 IFS 集成财经服务流程(限制版)

目录 简介 集成财经服务 专栏列表 CSDN学院 简介 今天主要来谈谈华为流程体系中的财经流程。 大家可以看下面这张图。 深蓝色标注的就是 IFS 流程的在企业整体流程架构中的位置。 财经部门其实也是直接或间接跟客户打交道的。 这就意味着,财经也是需要做端到…

Unity源码分享-大量鱼类模型Underwater Animals Pack

Unity源码分享-大量鱼类模型Underwater Animals Pack 下载地址:https://download.csdn.net/download/Highning0007/88061483

FPGA XDMA 中断模式实现 PCIE3.0 HDMI视频采集卡 提供2套工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案视频采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

中国芯片发出怒吼,要求回购700台光刻机,ASML承受不起

多家媒体报道指国内知名存储芯片企业长江存储的董事长指出已买回的光刻机因维护和零件问题可能无法使用,因此提出基于公平原则,ASML理应回购这些光刻机,凸显出中国芯片企业的愤怒。 由于美国的阻挠,ASML不仅不会继续对中国出售先进…

工厂方法模式(java)

目录 结构 案例 类图 代码实现 抽象咖啡工厂 美式咖啡工厂 拿铁咖啡工厂 咖啡类(抽象产品类) 美式咖啡 拿铁咖啡 咖啡店类 测试类 优缺点 优点 缺点 结构 工厂方法模式的主要角色: 抽象工厂(Abstract Factory&…

MySQL常用语句

目录 连接MySQL 数据库操作 表的操作 数据操作 进阶查询 源码等资料获取方法 连接MySQL -- 语法:mysql -u用户名 -p密码 注:--空格 起到注释的作用 mysql -uroot -p123456 数据库操作 -- 显示当前时间、用户名、数据库版本(可以单独…

NodeJS实现支付宝沙箱支付②③

文章目录 前言版权声明Alipay SDK 沙箱环境简介Node环境要求沙箱环境配置下载所需模块准备前端静态页面以及Node服务器文件夹规范AlipaySdk 配置准备AlipaySdk 代码演示 Alipay实例化 ~ alipay.sdk 文件 AlipayForm ~ alipayForm文件 AlipayFormStatus ~ alipayForm文件 …

MQTT协议在物联网环境中的应用及代码实现解析(四)

四、使用单片机环境编程接收MQTT服务器上特定主题的信息 以下是使用STM32F103单片机链接W5500芯片链接到网络上,利用MQTT协议接收MQTT服务器“mqtt.laobai.net”上的“laobai_topic001”主题上的订阅信息,并发送给串口的C语言代码示例,包括完…

C语言——指针详解(进阶)

轻松学会C语言指针 一、字符指针二、数组指针2.1 数组指针的定义2.2 &数组名VS数组名2.3 数组指针的使用 三、指针数组四、数组参数和指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 五、函数指针六、函数指针数组七、指向函数指针数组的指针八…

计算机网络微课堂学习笔记(详细图解讲解)-长期更新

前言: 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施,计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或缺的一部分 一、因特网概述 (1)网络、…

ChatGPT火热之下的冷思考

作为一款基于人工智能的自然语言处理(NLP)​​聊天机器人​​程序,ChatGPT通过大量来自互联网的文本进行训练,并使用深度学习和机器学习算法来理解用户的问题并提供准确的回答。并且,ChatGPT还内置了情感分析、关键字提取和实体识别等功能&am…

ngsoc使用指南

和威胁告警差不多。 ngsoc是以资产为核心,以安全事件为管理的关键流程,建立一套威胁检测,相应,预测,和持续监控分析,一体化的监控与相应平台。 和天眼的区别:会把天眼的告警,其他安…