2
为什么array_agg()比非聚合ARRAY()构造函数慢?
我只是在回顾一些为8.4之前的PostgreSQL编写的旧代码,我发现确实很不错。我记得以前有一个自定义函数来执行某些操作,但我忘记了它的外观array_agg()。为了进行回顾,现代聚合是这样写的。 SELECT array_agg(x ORDER BY x DESC) FROM foobar; 但是,从前,它是这样写的, SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC); 因此,我尝试了一些测试数据。 CREATE TEMP TABLE foobar AS SELECT * FROM generate_series(1,1e7) AS t(x); 结果令人惊讶。#OldSchoolCool方法大大提高了速度:加快了25%。而且,在不使用ORDER的情况下对其进行简化显示出相同的慢度。 # EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Result (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 …