首页 > 其他分享 >GaussDB高性能关键技术——查询重写RBO

GaussDB高性能关键技术——查询重写RBO

时间:2024-12-18 16:56:25浏览次数:4  
标签:product GaussDB t2 t1 RBO c2 c1 查询 重写

在数据库里RBO基于规则的优化一般指查询重写技术,按照一系列关系代数表达式的等价规则,对查询的关系代数表达式进行等价转换,从逻辑上减少执行的总量从而提高查询执行效率,例如,通过条件的推导得出非必要的表扫描、避免非必要的计算表示等。
在这里插入图片描述

查询重写RBO优化是非常重要的一种逻辑优化手段,通常应用和实施在查询优化过程的前端,将一些肯定能够优化的场景进行优化,RBO优化结束后进行物理优化,以下以常用的几种重写优化进行介绍:
Example 1:谓词化简优化Predicate Simplification

使用谓词查询条件的可满足性Satisfiability (SAT)&可传递性Transitive Closure(TC)对查询进行化简,a.w.k SAT-TC,假设有t1,t2表,他们的定义分别为:T1(c1 int, c2 int);,T2(c1 int, c2 int check (c2 < 30));,则原查询:

SELECT t1.c1,t1.c2, t2.c1, t2.c2FROM t1 JOIN t2 ON t1.c2 = t2.c2WHERE t1.c2 > 20

可优化为:

SELECT dt1.c1,dt1.c2, dt2.c1, dt2.c2FROM (select c1,c2 from t1 where t1.c2 between 20 and 30) as dt1,(select c1,c2 from t2 where t2.c2 between 20 and 30) as dt2WHERE dt1.c2 = dt2.c2;

说明:通过谓词逻辑可以发现当前查询中可以一次实施TC->SAT->TC
优化策略。
step1: TC优化:内连接关联条件t1.c2 = t2.c2 && t1.c2 > 20可以得出t2.c2 > 20

step2: SAT优化:t2.c2列上创建有check-constraint可以得出t2.c2 BETWEEN 20 AND 30

step3: TC优化:同理得出t1.c2 BETWEEN 20 AND 30

到此t1,t2在关联之前就可以最大限度减小处理的元组数,达到提升性能的目的,以下是其他SATTC例子:

A=B AND A=C --> B=CA=5 AND A=B --> B=5A=5 AND A IS NULL --> FALSEA=5 AND A IS NOT NULL --> A=5X > 1 AND Y > X --> Y >= 3X IN (1,2,3) AND Y=X --> Y IN (1,2,3)

Example 2:谓词下推优化Predicate Push Down

将谓词查询条件下沉到中间结果集的最底层提前过滤,可以有效减少读入到内存中数据的数量,减少计算层的代价

优化前:

SELECT MAX(total)FROM (SELECT product_key, product_name,SUM(quantity*amount) AS totalFROM Sales, ProductWHERE sales_product_key=product_keyGROUP BY product_key, product_name) AS vWHERE product_key IN (10, 20, 30);

优化后:

SELECT MAX(total)FROM (SELECT product_key, product_name,SUM(quantity*amount) AS totalFROM Sales, ProductWHERE sales_product_key=product_key AND product_key IN (10, 20, 30)GROUP BY product_key, product_name) AS vWHERE product_key IN (10, 20, 30);

说明:查询在优化前需要事先将中间结果集v计算出。

在计算的过程中需要对sales、product两张表的全量数据进行读取进行,然后对结果集进行Group分组、Aggregation聚合操作,但是最终的结果集只要求输出product_key的值为10,20,30的结果集。

利用谓词下推规则可以让product_key in(10,20,30)过滤操作在Join之前完成,如果查询条件product_key in(10,20,30)的选择率较低则可以减少Join、Aggregation、Group三个操作处理的数据量,从而提升性能。

Example 3:谓词上移优化Predicate Pullup

将谓词查询条件中比较繁重的函数计算放到最后,期望减小繁重计算的次数达到提升性能的目的。优化前:

SELECT *FROM t1,(SELECT * FROM t2WHERE complex_func(t2.c2) = 3) AS dt(c1,c2,c3)WHERE t1.c1 = t2.c1 AND t1.c2 > 30

优化后:

SELECT *FROM t1,(SELECT * FROM t2) AS dt(c1,c2,c3)WHERE t1.c1 = t2.c1 AND t1.c2 > 30 AND complex_func(t2.c2) = 3

说明:

原查询“complex_func(t2.c2) = 3”查询条件在子查询中,如果该条件在子查询DT中被计算则会导致t2表中的全量数据被计算开销较大。

通过谓词pullup上移到最外层让t2先和t1做关联和过滤,则能够有效减少complex_func被调用的次数,从而达到性能提升的目的。

查询重写是查询优化器阶主要分类之一,通常可以快速将处理的数据进行成倍数缩减,下图是常见的查询重写分类

在这里插入图片描述

标签:product,GaussDB,t2,t1,RBO,c2,c1,查询,重写
From: https://www.cnblogs.com/xiaoxu0211/p/18615346

相关文章

  • GaussDB数据库技术解读——高性能关键技术
    GaussDB数据库技术解读——高性能关键技术内容概要:本章节介绍GaussDB中实现的高性能关键技术,内容涉及优化器、执行器、分布式数据库、存储引擎等多个方面。目的:通过对GaussDB数据库关键高性能技术的学习,能够让读者更加清晰的理解数据库内核哪些优化是性能关键点同时也为类似的应......
  • GaussDB数据库技术解读——分布式执行
    GaussDB数据库技术解读——分布式执行分布式执行主要为分布式数据库提供一套完备的支撑数据跨节点交换,协同计算的计算框架,能够支撑位于不同地点的许多计算分片机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库,数据的分布式切片方式从大的分类上......
  • GaussDB技术解读——高性能之查询处理流程
    GaussDB技术解读——高性能之查询处理流程查询处理流程查询在经典数据库实现中需要依次进行以下4个环节,(1)查询解析:对用户输入查询进行编译,把查询从文本方式翻译成执行引擎可以识别的语句。(2)查询优化:对查询的进行基于规则的逻辑优化RBO和基于代价CBO的物理优化(3)查询执行:将查询执......
  • GaussDB技术解读高性能——物理优化CBO
    GaussDB技术解读高性能——物理优化CBO在优化器处理完RBO的优化以后,路径的选择往往不能通过实现制定好的规则进行变换,而是需要根据数据的分布(统计信息)情况来对查询执行路径进行评估,从可选的路径中选择一个执行代价最小的路劲进行执行,例如是否选择索引SeqScanvs.IndexScan、选择......
  • GaussDB技术解读高性能——数据分区与分区剪枝
    GaussDB技术解读高性能——数据分区与分区剪枝在数据系统中,数据分区是在一个实例内部按照用户指定的策略对数据做进一步的数据切分,将表按照指定规则划分为多个数据互不重叠的部分。从数据分区的角度来看是一种水平分区(horizontalpartition)分区策略方式。分区表增强了数据库应用......
  • GaussDB技术解读高性能——计划缓存计划技术
    GaussDB技术解读高性能——计划缓存计划技术数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划->执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的......
  • GaussDB技术解读高性能——分布式执行框架
    由于GaussDB采用的是无共享Shared-nothing的架构,由众多独立且互不共享CPU、内存、存储等系统资源的逻辑节点组成。在这样的系统架构中,业务数据被分散存储在多个物理节点上,数据分析任务会被推送到数据所在位置就近执行,通过控制模块的协调,并行地完成大规模的数据处理工作,实现对数据......
  • GaussDB技术解读高性能——分布式优化器
    GaussDB技术解读高性能——分布式优化器分布式数据库场景下表分布在各个节点上,数据的本地性DataLocality是分布式优化器中生成执行计划时重点考虑的因素,基于ShareNothing的分布式数据库中有一个很关键概念就是“移动数据不如移动计算”,之所以有数据本地性就是因为数据在网络中......
  • 搭建Tomcat(三)---重写service方法
    目录引入一、在Java中创建一个新的空项目(初步搭建)问题:要求在tomcat软件包下的MyTomcat类中编写main文件,实现在MyTomcat中扫描myweb软件包中的所有Java文件,并返回“@WebServlet(url="myFirst")”中url内填写的值:①main函数解析:首先,main函数用try-catch做了异常处理:指定......
  • Ubuntu22.04 LTS 部署harbor-v2.7.2高可用
    Ubuntu22.04LTS部署harbor高可用环境准备均需要docker环境IP主机名10.0.0.20harbor0110.0.0.21harbor02一、harbor环境部署1.下载harbor包[root@harbor01:~]#wgethttps://github.com/goharbor/harbor/releases/download/v2.7.2/harbor-offline-insta......