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 …