当前位置: 首页 > news >正文

做网站有钱网站建设建设意见

做网站有钱,网站建设建设意见,vps wordpress cpu占用过高,邵阳市中高风险地区PostgreSQL17优化器改进(4)允许UNION(没有ALL)使用MergeAppend UNION存在的问题 到PostgreSQL16.3版本为止,UNION执行计划通常不是最优的,优化器有两种处理方法: 优化器只考虑使用Append节点并通过使用Hash Aggregate,Append -…

PostgreSQL17优化器改进(4)允许UNION(没有ALL)使用MergeAppend

UNION存在的问题

到PostgreSQL16.3版本为止,UNION执行计划通常不是最优的,优化器有两种处理方法:

  1. 优化器只考虑使用Append节点并通过使用Hash Aggregate,Append -> Hash Aggregate
  2. 对整个Append结果排序并通过unique操作符运行使结果唯一,Append -> Sort -> Unique

目前这两种方法总是需要从union子查询中读取所有行

解决方案

在PostgreSQL17版本中,官网通过调整union优化器,使它可以请求每个子查询并以目标列表顺序产生结果,以便将这些结果通过Merge Appended合并在一起,并使用Unique节点使其唯一。因为union子节点可以使用类似于b树索引 and/or Merge Joins为top-level UNION提供预先排序的输入,所以性能有了显著提高。如果top-level UNION包含一个LIMIT节点,该节点将输出行限制为结合行的一个小子集,因为可以使用廉价的启动计划,那么这一点特别好。

执行计划对比

创建测试表

set min_parallel_table_scan_size = '1kB';
set min_parallel_index_scan_size = '1kB';
set parallel_setup_cost = 0;
set parallel_tuple_cost = 0;
set max_parallel_workers_per_gather = 2;
create table t (a int, b int, c int);
insert into t select mod(i,10),mod(i,10),i from generate_series(1,10000) s(i);
create index on t (a);
analyze t;

PostgreSQL16.3的执行计划

优化器只考虑使用Append节点并通过使用Hash Aggregate

由于数据库的参数enable_hashagg默认值是on,含义是允许或禁用查询规划器使用哈希聚集计划类型,因此正常情况下生成的是下面的执行计划。

testdb=# explain (costs off) select count(*) from( select a from t union select c from t ) ss;QUERY PLAN              
-------------------------------------Aggregate->  HashAggregateGroup Key: t.a->  Append->  Seq Scan on t->  Seq Scan on t t_1
(6 rows)
对整个Append结果排序并通过unique操作符运行使结果唯一

如果要生成该执行计划,需要修该enable_hashagg为off

postgres=# set enable_hashagg to off;
SET
postgres=# explain (costs off) select count(*) from( select a from t union select c from t ) ss;QUERY PLAN                 
-------------------------------------------Aggregate->  Unique->  SortSort Key: t.a->  Append->  Seq Scan on t->  Seq Scan on t t_1

PostgreSQL17的执行计划

优化器只考虑使用Append节点并通过使用Hash Aggregate

由于数据库的参数enable_hashagg默认值是on,含义是允许或禁用查询规划器使用哈希聚集计划类型,因此正常情况下生成的是下面的执行计划

testdb=# explain (costs off) select count(*) from( select a from t union select c from t ) ss;QUERY PLAN                     
----------------------------------------------------Aggregate->  HashAggregateGroup Key: t.a->  GatherWorkers Planned: 2->  Parallel Append->  Parallel Seq Scan on t->  Parallel Seq Scan on t t_1
(8 rows)

当前执行计划的执行路径,和PostgreSQL16.3执行计划路径,相差不大,优化器还是使用Append节点并通过使用Hash Aggregate,Append -> Hash Aggregate

对整个Append结果排序并通过unique操作符运行使结果唯一

如果要生成该执行计划,需要修该enable_hashagg为off

testdb=# set enable_hashagg to off;
SET
testdb=# explain (costs off) select count(*) from( select a from t union select c from t ) ss;QUERY PLAN                        
----------------------------------------------------------Aggregate->  Unique->  Merge AppendSort Key: t.a->  Index Only Scan using t_a_idx on t->  Gather MergeWorkers Planned: 2->  SortSort Key: t_1.c->  Parallel Seq Scan on t t_1
(10 rows)

总结

根据官网发布新优化器的描述和对PostgreSQL16.3和PostgreSQL17版本的对比测试,针对官网描述允许UNION(没有ALL)使用MergeAppend,应该具体是对PostgreSQL16.3版本中对于UNION执行计划的其中一个分支,即对整个Append结果排序并通过unique操作符运行使结果唯一(Append -> Sort -> Unique)执行路径进行了优化,优化后的路径应该为Sort->Merge Append-> Unique,需要得到该结果的前提是需要设置enable_hashagg为off。UNION执行计划的另外一个分支,实际上也有优化,但是本文不做说明,后续文章就继续分析。

– / END / –

如果这篇文章为你带来了灵感或启发,就请帮忙点赞收藏转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!

http://www.yayakq.cn/news/598400/

相关文章:

  • 成都网站建设公司湖南岚鸿wordpress 链接 排序
  • 哪里有网站建设流程对于网站反爬虫如何做
  • 那个网站可以做攻略南昌优秀网站建设
  • 网站建设名片设计工程外包平台
  • 网站建设手机字体大小做网站的顺序
  • 网站开发的技术分类热门手机网站
  • 网站开发实训报告参考文献网络营销推广外包服务
  • 人才招聘网网站策划方案读经典做临床报名网站
  • 珠海企业机械网站建设做软件的步骤
  • 丽水微信网站建设报价网络资源管理系统
  • 购物网站功能模块网站建设服务平台
  • 杭州做网站一般多少钱怎么区分网站是模板做的
  • 苏州网站建设哪家便宜北京seo课程培训
  • 快速建站完整版北京装饰公司名称
  • 网站建设培训公司排名泰州网站建设托管
  • 石家庄局域网网站建设设计网站设计原则
  • 建设银行信用卡网站会员注册哈尔滨品牌建站软件
  • 深圳网站开发定制超级外链发布工具
  • 阿里巴巴的关联网站白领兼职做网站
  • 许昌市网站建设网络公司商标注册
  • 佛山网站云集网站哪个公司做的
  • 小网站建设深圳公司注册材料
  • 安庆网站建设电话什么系统做购物网站好
  • 国内设计网站公司wordpress替换
  • 长沙那个手机建网站公司好山东建设部网站
  • 17做网店网站推荐聊城做网站的公司
  • cms网站管理系统阿里云网站建设——部署与发布
  • 静态网站制作价格seo服务 收费
  • 做网站的公司都有哪些岗位网站建设定制网站建设公司
  • 杭州市城乡规划局建设局官方网站推广咨询