- 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.
推薦閱讀
- Blockchain Quick Start Guide
- 來吧!帶你玩轉Excel VBA
- 機艙監測與主機遙控
- Visual C# 2008開發技術詳解
- 工業機器人工程應用虛擬仿真教程:MotoSim EG-VRC
- 基于32位ColdFire構建嵌入式系統
- 計算機網絡安全
- 單片機技術一學就會
- Extending Ansible
- Linux Shell Scripting Cookbook(Third Edition)
- Web璀璨:Silverlight應用技術完全指南
- 空間機器人智能感知技術
- DynamoDB Applied Design Patterns
- Getting Started with Tableau 2018.x
- 網絡安全原理與應用