官术网_书友最值得收藏!

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 177字
  • 2021-07-09 19:57:24

Investigating performance

Grouping sets are a powerful feature; they help to reduce the number of expensive queries. Internally, PostgreSQL will basically turn to traditional GroupAggregates to make things work. A GroupAggregate node requires sorted data, so be prepared that PostgreSQL might do a lot of temporary sorting:

test=# explain SELECT   region, country, avg(production)                                                                                         FROM    t_oil                                                                                                                                    WHERE   country IN ('USA', 'Canada', 'Iran', 'Oman')                                                                                             GROUP BY GROUPING SETS ( (), region, country); 
QUERY PLAN
---------------------------------------------------------------
GroupAggregate (cost=22.58..32.69 rows=34 width=52)
Group Key: region
Group Key: ()
Sort Key: country
Group Key: country
-> Sort (cost=22.58..23.04 rows=184 width=24)
Sort Key: region
-> Seq Scan on t_oil
(cost=0.00..15.66 rows=184 width=24)
Filter: (country = ANY
('{USA,Canada,Iran,Oman}'::text[]))
(9 rows)

Hash aggregates are only supported for normal GROUP BY clauses involving no grouping sets. According to the developer of grouping sets (Atri Shama), whom I talked to shortly before writing this chapter, adding support for hashes is not worth the effort; so it seems PostgreSQL already has an efficient implementation even if the optimizer has fewer choices than it has with normal GROUP BY statements.

主站蜘蛛池模板: 璧山县| 东源县| 娱乐| 中西区| 青海省| 定日县| 保靖县| 乐东| 汕尾市| 南开区| 扎囊县| 昌吉市| 定陶县| 易门县| 长岛县| 凤山市| 慈溪市| 镇平县| 渝北区| 军事| 霍林郭勒市| 汶川县| 满洲里市| 肥城市| 普兰县| 宝鸡市| 南华县| 城固县| 文昌市| 田林县| 潮州市| 高密市| 阳曲县| 琼结县| 翁源县| 齐齐哈尔市| 白城市| 巩义市| 曲麻莱县| 神农架林区| 临安市|