优化数仓业务视图:过滤条件传递

优化,业务,视图,过滤,条件,传递 · 浏览次数 : 86

小编点评

**视图过滤条件传递优化** 当业务需求满足时,将有效的过滤条件传递到基表中可以有效降低视图的运算效率,提升SQL执行效率。 **SQL优化:** * 将视图中关联的“agency_id”字段进行过滤条件传递。 * 使用视图定义中量表关联条件增加“agency_id”字段关联条件。 **优化步骤:** 1. 在视图中添加“agency_id”字段。 2. 在业务逻辑中根据“agency_id”进行过滤条件传递。 3. 优化SQL查询,从“pay_voucher”表中获取738行数据进行运算。 **结果:** * SQL 查询耗时从 22s 降低至 0.4s。 * 仅需从“pay_voucher”表中获取 738 行数据进行运算。 **结论:** 通过将有效过滤条件传递到基表,可以有效降低视图的运算效率,提升SQL执行效率。

正文

摘要:在业务功能实现时,经常会用到视图简化查询SQL。但有时候会因为视图降低查询效率,本文主要分析在业务需求满足的情况下,将有效的过滤条件传递到基表,减少运算过程中数据库需要处理的数据量,提升SQL执行效率。

本文分享自华为云社区《GaussDB(DWS)业务视图优化-过滤条件传递》,作者:卫小毛 。

在业务功能实现时,经常会用到视图简化查询SQL。但有时候会因为视图降低查询效率,本文主要分析在业务需求满足的情况下,将有效的过滤条件传递到基表,减少运算过程中数据库需要处理的数据量,提升SQL执行效率。

SQL举例

SELECT
    count(1) AS have_done_num,
    t1.task_def_key_ AS menuguid
FROM
    vw_pay_voucher_bill t2
LEFT JOIN xact_hi_taskinst t1 ON t1.business_key_ = t2.id
AND t1.proc_def_key_ = 'pay_voucher_bill'
AND t1.operation_flag_ IN ('NORMAL', 'WITHDRAW')
AND t1.suspension_state_ = 1
AND t1.org_code_ = t2.mof_div_code
AND delete_reason_ = 'completed'
AND ext1_ IS NULL
WHERE
    t2.is_deleted = '2'
AND t2.fiscal_year = '2022'
AND t2.mof_div_code = 'xxxxxxxx0'
AND (
    agency_id = '5A1xxxxxxxxxxxxxxxxxxx4T5'
)
GROUP BY
    t1.task_def_key_
HAVING
    t1.task_def_key_ IS NOT NULL;

sql 分析:以上SQL vw_pay_voucher_bill t2 、xact_hi_taskinst t1 视图和表进行关联查询

根据业务特性分析过滤效果较好的字段为 agency_id

优化前耗时: 22s

分析执行计划:

时间主要耗时在 seq scan on pay_voucher_bill v 这一步

看到该表过滤条件仅有mof_div_code、fiscal_year、is_deleted 过滤效果差,几乎全表数据参与过程运算,执行代价高

视图及表结构分析:

视图中关联条件较为有效的过滤条件,bgt_id 字段查询时不会应用。分析视图中“v”和“t”表都存在agency_id 字段,当前t表过滤使用了agency_id字段,可以考虑视图定义中量表关联条件增加 agency_id 字段关联条件需要考虑业务需求。

同业务沟通后可进行优化

优化后耗时:0.4s

对比优化前后SQL查询结果一致

优化总结:

同业务侧研发沟通客户实际需要仅需要查询本单位 (agency_id) 下的数据,但因为SQL和视图设计时,并未将这一有效条件传递给每张表。导致数据库在针对 pay_voucher 进行数据过滤时需要将全表64万+ 数据筛选出来进行运算,仅仅这一步开销就占用了20s+。在优化后(视图中增加agency_id关联信息后,该操作可将agency_id 过滤条件传递给基表 pay_voucher),仅需从pay_voucher 表中获取738行数据进行运算,最终sql耗时降为 0.4s左右。

 

点击关注,第一时间了解华为云新鲜技术~

与优化数仓业务视图:过滤条件传递相似的内容:

优化数仓业务视图:过滤条件传递

摘要:在业务功能实现时,经常会用到视图简化查询SQL。但有时候会因为视图降低查询效率,本文主要分析在业务需求满足的情况下,将有效的过滤条件传递到基表,减少运算过程中数据库需要处理的数据量,提升SQL执行效率。 本文分享自华为云社区《GaussDB(DWS)业务视图优化-过滤条件传递》,作者:卫小毛

数仓性能调优:大宽表关联MERGE性能优化

摘要:本文主要为大家讲解在数仓性能调优过程中,关于大宽表关联MERGE性能优化过程。 本文分享自华为云社区《GaussDB(DWS)性能调优:大宽表关联MERGE性能优化》,作者:譡里个檔。 【业务背景】 如下MERGE语句执行耗时长达2034s MERGE INTO sdifin.hah_ae_l

教你处理数仓慢SQL常见定位问题

摘要:通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL。 本文分享自华为云社区《GaussDB慢SQL常见定位处理手段》,作者:酷哥。 关键指标 通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL

解读数仓常用模糊查询的优化方法

摘要:本文讲解了GaussDB(DWS)上模糊查询常用的性能优化方法,通过创建索引,能够提升多种场景下模糊查询语句的执行速度。 本文分享自华为云社区《GaussDB(DWS) 模糊查询性能优化》,作者: 黎明的风 。 在使用GaussDB(DWS)时,通过like进行模糊查询,有时会遇到查询性能慢的

详解数仓中sequence的应用场景及优化

摘要:本文简单介绍sequence的使用场景及如何修改sequence的cache值提高性能。 本文分享自华为云社区《GaussDB(DWS)关于sequence的那些事》,作者:Arrow0lf 。 什么是sequence sequence,也称作序列,是用来产生唯一整数的数据库对象。序列的值按照

数仓性能优化:倾斜优化-表达式计算倾斜的hint优化

本文主要讲解表达式倾斜的hint优化。

DTSE Tech Talk 第18期丨统计信息大揭秘,数仓SQL执行优化之密钥

摘要:华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息的自动收集功能。 在本期《统计信息大揭秘——SQL执行优化之密钥》的主题直播中,我们邀请到华为云EI

数仓性能调优:如何进行函数下推

摘要:本文主要描述下函数在满足特征的前提下可以把函数属性定义为下推属性。 本文分享自华为云社区《GaussDB(DWS)性能调优:函数下推》,作者:譡里个檔 。 DWS作为MPP架构的数仓产品,其性能优势主要在分布式计算上。默认情况下,DWS为了保证结果的正确性,自定义函数默认属性是不下推的,这会导

[转帖]金仓数据库KingbaseES 数据库参数优化

目录 一、数据库应用类型 二、主要参数 max_connections shared_buffers effective_cache_size maintenance_work_mem checkpoint_completion_target wal_buffers default_statisti

金仓数据库全攻略:简化部署,优化管理的全流程指南

通过本篇文章的学习和实践,我们深入了解了如何利用Docker技术快速部署KingbaseES数据库。从下载镜像到编写Docker Compose模板,再到容器的启动和管理,每一步都体现了现代化部署方式的便捷和高效。此外,我们还掌握了KSQL命令行工具的使用,这将极大地提升开发人员与数据库交互的效率。