写点什么

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

  • 2023-02-08
    中国香港
  • 本文字数:673 字

    阅读完需:约 2 分钟

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

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


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

1、SQL 举例


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 左右。


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

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
优化数仓业务视图:过滤条件传递_数据库_华为云开发者联盟_InfoQ写作社区