From b9755898e97fdc5e4d58239e525cd1813eccf7b2 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Tue, 7 May 2024 14:15:49 +0200 Subject: [PATCH 1/4] Fix the flaky merge_append_partially_compressed test Add ANALYZE. To keep the desired MergeAppend plans, we also have to add a LIMIT everywhere so that the MergeAppend is chosen based on its lower startup cost. Otherwise the plain Sort over Append will be chosen because for small tables its cost is less. --- .../merge_append_partially_compressed-15.out | 861 +++++++++--------- .../merge_append_partially_compressed.sql.in | 68 +- 2 files changed, 469 insertions(+), 460 deletions(-) diff --git a/tsl/test/expected/merge_append_partially_compressed-15.out b/tsl/test/expected/merge_append_partially_compressed-15.out index ee9f92d7eeb..4b2a7e16cbe 100644 --- a/tsl/test/expected/merge_append_partially_compressed-15.out +++ b/tsl/test/expected/merge_append_partially_compressed-15.out @@ -518,30 +518,11 @@ SELECT compress_chunk(i) FROM show_chunks('test1') i; _timescaledb_internal._hyper_3_7_chunk (1 row) -ANALYZE test1; -- make all the chunks partially compressed INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:01:00-00', 10, 20, 30, 40 ,50); +ANALYZE test1; -- tests that require resorting (pushdown below decompressChunk node cannot happen) -- requires resorting, no pushdown can happen -:PREFIX -SELECT * FROM test1 ORDER BY time DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) - :PREFIX SELECT * FROM test1 ORDER BY time DESC LIMIT 10; QUERY PLAN @@ -564,162 +545,172 @@ SELECT * FROM test1 ORDER BY time DESC LIMIT 10; -- requires resorting :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) -- all these require resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------ + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) set max_parallel_workers_per_gather = 0; -- parallel plan different on Windows set enable_hashagg to off; -- different on PG13 :PREFIX -SELECT x1, x2, max(time) FROM test1 GROUP BY x1, x2, time ORDER BY time limit 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------- +SELECT x1, x2, max(time) FROM (SELECT * FROM test1 ORDER BY time, x1, x2 LIMIT 10) t +GROUP BY x1, x2, time ORDER BY time limit 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> GroupAggregate (actual rows=5 loops=1) Group Key: test1."time", test1.x1, test1.x2 - -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x1, test1.x2 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(16 rows) + -> Limit (actual rows=5 loops=1) + -> Result (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x1, test1.x2 + -> Merge Append (actual rows=5 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(18 rows) reset max_parallel_workers_per_gather; reset enable_hashagg; @@ -920,34 +911,36 @@ SELECT compress_chunk(i) FROM show_chunks('test2') i; -- make them partially compressed INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test2; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -962,32 +955,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1003,32 +997,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x3; +SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1043,32 +1038,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1083,32 +1079,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x4; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, time; +SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1165,44 +1162,46 @@ SELECT compress_chunk(i) FROM show_chunks('test3') i; -- make them partially compressed INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test3; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1217,42 +1216,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1268,42 +1268,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x3; +SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1318,42 +1319,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1368,42 +1370,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x4; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, time; +SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 diff --git a/tsl/test/sql/merge_append_partially_compressed.sql.in b/tsl/test/sql/merge_append_partially_compressed.sql.in index c20535a990a..e319a28cdcc 100644 --- a/tsl/test/sql/merge_append_partially_compressed.sql.in +++ b/tsl/test/sql/merge_append_partially_compressed.sql.in @@ -65,46 +65,48 @@ INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:00:00-00', 2, INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 03:00:00-00', 1, 2, 4, 4, 0); SELECT compress_chunk(i) FROM show_chunks('test1') i; -ANALYZE test1; -- make all the chunks partially compressed INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:01:00-00', 10, 20, 30, 40 ,50); +ANALYZE test1; + -- tests that require resorting (pushdown below decompressChunk node cannot happen) -- requires resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC; -:PREFIX SELECT * FROM test1 ORDER BY time DESC LIMIT 10; -- requires resorting :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST; +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST LIMIT 10; -- all these require resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST; +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST LIMIT 10; :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST; +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST LIMIT 10; :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST; +SELECT * FROM test1 ORDER BY time ASC NULLS LAST LIMIT 10; :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST; +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST LIMIT 10; :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST; +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST LIMIT 10; :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC; +SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC LIMIT 10; set max_parallel_workers_per_gather = 0; -- parallel plan different on Windows set enable_hashagg to off; -- different on PG13 + :PREFIX -SELECT x1, x2, max(time) FROM test1 GROUP BY x1, x2, time ORDER BY time limit 10; +SELECT x1, x2, max(time) FROM (SELECT * FROM test1 ORDER BY time, x1, x2 LIMIT 10) t +GROUP BY x1, x2, time ORDER BY time limit 10; + reset max_parallel_workers_per_gather; reset enable_hashagg; @@ -167,20 +169,22 @@ SELECT compress_chunk(i) FROM show_chunks('test2') i; INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test2; + set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3; -SELECT * FROM test2 ORDER BY x1, x2, x5, x3; -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; -SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; -- queries where sort is not pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3; -SELECT * FROM test2 ORDER BY x1, x2, x3; -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4; -SELECT * FROM test2 ORDER BY x1, x2, x5, x4; -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time; -SELECT * FROM test2 ORDER BY x1, x2, x5, time; +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; +SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; +SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; +SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; ----------------------------- -- tests with space partitioning @@ -213,18 +217,20 @@ SELECT compress_chunk(i) FROM show_chunks('test3') i; INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test3; + set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3; -SELECT * FROM test3 ORDER BY x1, x2, x5, x3; -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; -SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; -- queries where sort is not pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3; -SELECT * FROM test3 ORDER BY x1, x2, x3; -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4; -SELECT * FROM test3 ORDER BY x1, x2, x5, x4; -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time; -SELECT * FROM test3 ORDER BY x1, x2, x5, time; +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; +SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; +SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; +SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; From 76433431b4960d7e258a9d331d21f82d28a4ecd2 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Tue, 7 May 2024 14:19:20 +0200 Subject: [PATCH 2/4] reference merge_append_partially_compressed-* --- .../merge_append_partially_compressed-16.out | 861 +++++++++--------- 1 file changed, 432 insertions(+), 429 deletions(-) diff --git a/tsl/test/expected/merge_append_partially_compressed-16.out b/tsl/test/expected/merge_append_partially_compressed-16.out index ee9f92d7eeb..4b2a7e16cbe 100644 --- a/tsl/test/expected/merge_append_partially_compressed-16.out +++ b/tsl/test/expected/merge_append_partially_compressed-16.out @@ -518,30 +518,11 @@ SELECT compress_chunk(i) FROM show_chunks('test1') i; _timescaledb_internal._hyper_3_7_chunk (1 row) -ANALYZE test1; -- make all the chunks partially compressed INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:01:00-00', 10, 20, 30, 40 ,50); +ANALYZE test1; -- tests that require resorting (pushdown below decompressChunk node cannot happen) -- requires resorting, no pushdown can happen -:PREFIX -SELECT * FROM test1 ORDER BY time DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) - :PREFIX SELECT * FROM test1 ORDER BY time DESC LIMIT 10; QUERY PLAN @@ -564,162 +545,172 @@ SELECT * FROM test1 ORDER BY time DESC LIMIT 10; -- requires resorting :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) -- all these require resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------ + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) set max_parallel_workers_per_gather = 0; -- parallel plan different on Windows set enable_hashagg to off; -- different on PG13 :PREFIX -SELECT x1, x2, max(time) FROM test1 GROUP BY x1, x2, time ORDER BY time limit 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------- +SELECT x1, x2, max(time) FROM (SELECT * FROM test1 ORDER BY time, x1, x2 LIMIT 10) t +GROUP BY x1, x2, time ORDER BY time limit 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> GroupAggregate (actual rows=5 loops=1) Group Key: test1."time", test1.x1, test1.x2 - -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x1, test1.x2 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(16 rows) + -> Limit (actual rows=5 loops=1) + -> Result (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x1, test1.x2 + -> Merge Append (actual rows=5 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(18 rows) reset max_parallel_workers_per_gather; reset enable_hashagg; @@ -920,34 +911,36 @@ SELECT compress_chunk(i) FROM show_chunks('test2') i; -- make them partially compressed INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test2; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -962,32 +955,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1003,32 +997,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x3; +SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1043,32 +1038,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1083,32 +1079,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x4; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, time; +SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1165,44 +1162,46 @@ SELECT compress_chunk(i) FROM show_chunks('test3') i; -- make them partially compressed INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test3; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1217,42 +1216,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1268,42 +1268,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x3; +SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1318,42 +1319,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1368,42 +1370,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x4; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, time; +SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 From 4f5b34f729aa0950a1b8142f6d919eb3ae68fff7 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Tue, 7 May 2024 14:24:32 +0200 Subject: [PATCH 3/4] reference REL_14_9-96-g162b38a068 merge_append_partially_compressed-* --- .../merge_append_partially_compressed-14.out | 858 +++++++++--------- 1 file changed, 430 insertions(+), 428 deletions(-) diff --git a/tsl/test/expected/merge_append_partially_compressed-14.out b/tsl/test/expected/merge_append_partially_compressed-14.out index 77381c54acd..ef3326d5a9b 100644 --- a/tsl/test/expected/merge_append_partially_compressed-14.out +++ b/tsl/test/expected/merge_append_partially_compressed-14.out @@ -512,30 +512,11 @@ SELECT compress_chunk(i) FROM show_chunks('test1') i; _timescaledb_internal._hyper_3_7_chunk (1 row) -ANALYZE test1; -- make all the chunks partially compressed INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:01:00-00', 10, 20, 30, 40 ,50); +ANALYZE test1; -- tests that require resorting (pushdown below decompressChunk node cannot happen) -- requires resorting, no pushdown can happen -:PREFIX -SELECT * FROM test1 ORDER BY time DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) - :PREFIX SELECT * FROM test1 ORDER BY time DESC LIMIT 10; QUERY PLAN @@ -558,162 +539,171 @@ SELECT * FROM test1 ORDER BY time DESC LIMIT 10; -- requires resorting :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) -- all these require resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------ + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) set max_parallel_workers_per_gather = 0; -- parallel plan different on Windows set enable_hashagg to off; -- different on PG13 :PREFIX -SELECT x1, x2, max(time) FROM test1 GROUP BY x1, x2, time ORDER BY time limit 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------- +SELECT x1, x2, max(time) FROM (SELECT * FROM test1 ORDER BY time, x1, x2 LIMIT 10) t +GROUP BY x1, x2, time ORDER BY time limit 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> GroupAggregate (actual rows=5 loops=1) Group Key: test1."time", test1.x1, test1.x2 - -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x1, test1.x2 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) + -> Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x1, test1.x2 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(16 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(17 rows) reset max_parallel_workers_per_gather; reset enable_hashagg; @@ -914,34 +904,36 @@ SELECT compress_chunk(i) FROM show_chunks('test2') i; -- make them partially compressed INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test2; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -956,32 +948,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -997,32 +990,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x3; +SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1037,32 +1031,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1077,32 +1072,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x4; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, time; +SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1159,44 +1155,46 @@ SELECT compress_chunk(i) FROM show_chunks('test3') i; -- make them partially compressed INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test3; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1211,42 +1209,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1262,42 +1261,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x3; +SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1312,42 +1312,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1362,42 +1363,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x4; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, time; +SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 From 68062c74e5e4abbd9ef7b9d6482e9a53298731e4 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Tue, 7 May 2024 14:25:18 +0200 Subject: [PATCH 4/4] reference REL_13_9 merge_append_partially_compressed-* --- .../merge_append_partially_compressed-13.out | 869 +++++++++--------- 1 file changed, 437 insertions(+), 432 deletions(-) diff --git a/tsl/test/expected/merge_append_partially_compressed-13.out b/tsl/test/expected/merge_append_partially_compressed-13.out index 4eaeecf4c02..ef3326d5a9b 100644 --- a/tsl/test/expected/merge_append_partially_compressed-13.out +++ b/tsl/test/expected/merge_append_partially_compressed-13.out @@ -512,30 +512,11 @@ SELECT compress_chunk(i) FROM show_chunks('test1') i; _timescaledb_internal._hyper_3_7_chunk (1 row) -ANALYZE test1; -- make all the chunks partially compressed INSERT INTO test1 (time, x1, x2, x3, x4, x5) values('2000-01-01 02:01:00-00', 10, 20, 30, 40 ,50); +ANALYZE test1; -- tests that require resorting (pushdown below decompressChunk node cannot happen) -- requires resorting, no pushdown can happen -:PREFIX -SELECT * FROM test1 ORDER BY time DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) - :PREFIX SELECT * FROM test1 ORDER BY time DESC LIMIT 10; QUERY PLAN @@ -558,162 +539,171 @@ SELECT * FROM test1 ORDER BY time DESC LIMIT 10; -- requires resorting :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) -- all these require resorting, no pushdown can happen :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 ASC NULLS LAST LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------ + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" DESC, test1.x3, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time DESC NULLS FIRST, x3 ASC NULLS LAST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" DESC, test1.x3, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST; - QUERY PLAN ---------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x3 DESC, test1.x4 DESC - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS LAST, x3 DESC NULLS FIRST, x4 DESC NULLS FIRST LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x3 DESC, test1.x4 DESC + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x3 DESC, _hyper_3_7_chunk.x4 DESC + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) :PREFIX -SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +SELECT * FROM test1 ORDER BY time ASC NULLS FIRST, x3 DESC NULLS LAST, x4 ASC LIMIT 10; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time" NULLS FIRST, test1.x3 DESC NULLS LAST, test1.x4 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(13 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time" NULLS FIRST, _hyper_3_7_chunk.x3 DESC NULLS LAST, _hyper_3_7_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(14 rows) set max_parallel_workers_per_gather = 0; -- parallel plan different on Windows set enable_hashagg to off; -- different on PG13 :PREFIX -SELECT x1, x2, max(time) FROM test1 GROUP BY x1, x2, time ORDER BY time limit 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------- +SELECT x1, x2, max(time) FROM (SELECT * FROM test1 ORDER BY time, x1, x2 LIMIT 10) t +GROUP BY x1, x2, time ORDER BY time limit 10; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> GroupAggregate (actual rows=5 loops=1) Group Key: test1."time", test1.x1, test1.x2 - -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) - Order: test1."time", test1.x1, test1.x2 - -> Merge Append (actual rows=5 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) + -> Limit (actual rows=5 loops=1) + -> Custom Scan (ChunkAppend) on test1 (actual rows=5 loops=1) + Order: test1."time", test1.x1, test1.x2 + -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 - Sort Method: quicksort - -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(16 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_3_7_chunk."time", _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2 + Sort Method: quicksort + -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) +(17 rows) reset max_parallel_workers_per_gather; reset enable_hashagg; @@ -828,18 +818,21 @@ SELECT * FROM test1 ORDER BY x1, x2, x5, time LIMIT 10; :PREFIX SELECT * FROM test1 ORDER BY x1, x2, x5, time DESC, x3 ASC, x4 ASC LIMIT 10; -- pushdown - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Merge Append (actual rows=5 loops=1) Sort Key: _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2, _hyper_3_7_chunk.x5, _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 -> Custom Scan (DecompressChunk) on _hyper_3_7_chunk (actual rows=4 loops=1) - -> Index Scan using compress_hyper_4_8_chunk_x1_x2_x5__ts_meta_sequence_num_idx on compress_hyper_4_8_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_4_8_chunk.x1, compress_hyper_4_8_chunk.x2, compress_hyper_4_8_chunk.x5, compress_hyper_4_8_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_4_8_chunk (actual rows=3 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_3_7_chunk.x1, _hyper_3_7_chunk.x2, _hyper_3_7_chunk.x5, _hyper_3_7_chunk."time" DESC, _hyper_3_7_chunk.x3, _hyper_3_7_chunk.x4 Sort Method: quicksort -> Seq Scan on _hyper_3_7_chunk (actual rows=1 loops=1) -(9 rows) +(12 rows) :PREFIX SELECT * FROM test1 ORDER BY x1, x2, x5, time ASC, x3 DESC, x4 DESC LIMIT 10; -- pushdown @@ -911,34 +904,36 @@ SELECT compress_chunk(i) FROM show_chunks('test2') i; -- make them partially compressed INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test2 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test2; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -953,32 +948,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_11_chunk.x1, compress_hyper_6_11_chunk.x2, compress_hyper_6_11_chunk.x5, compress_hyper_6_11_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x3, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_12_chunk.x1, compress_hyper_6_12_chunk.x2, compress_hyper_6_12_chunk.x5, compress_hyper_6_12_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x3, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -994,32 +990,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x3; +SELECT * FROM test2 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1034,32 +1031,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x3; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, x4; +SELECT * FROM test2 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1074,32 +1072,33 @@ SELECT * FROM test2 ORDER BY x1, x2, x5, x4; Fri Dec 31 18:00:00 1999 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) - -> Sort (actual rows=4 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) - -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) -(20 rows) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_9_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_11_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_9_chunk.x1, _hyper_5_9_chunk.x2, _hyper_5_9_chunk.x5, _hyper_5_9_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_9_chunk (actual rows=1 loops=1) + -> Sort (actual rows=4 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_5_10_chunk (actual rows=4 loops=1) + -> Seq Scan on compress_hyper_6_12_chunk (actual rows=3 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_5_10_chunk.x1, _hyper_5_10_chunk.x2, _hyper_5_10_chunk.x5, _hyper_5_10_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_5_10_chunk (actual rows=1 loops=1) +(21 rows) -SELECT * FROM test2 ORDER BY x1, x2, x5, time; +SELECT * FROM test2 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1156,44 +1155,46 @@ SELECT compress_chunk(i) FROM show_chunks('test3') i; -- make them partially compressed INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-01 00:02:01-00', 1, 2, 1, 1, 0); INSERT INTO test3 (time, x1, x2, x3, x4, x5) values('2000-01-10 00:02:01-00', 1, 2, 1, 1, 0); +ANALYZE test3; set enable_indexscan = off; -- queries where sort is pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1208,42 +1209,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_17_chunk.x1, compress_hyper_8_17_chunk.x2, compress_hyper_8_17_chunk.x5, compress_hyper_8_17_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x3, _hyper_7_13_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Sort (actual rows=2 loops=1) - Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num - Sort Method: quicksort - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_18_chunk.x1, compress_hyper_8_18_chunk.x2, compress_hyper_8_18_chunk.x5, compress_hyper_8_18_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Sort (actual rows=2 loops=1) + Sort Key: compress_hyper_8_19_chunk.x1, compress_hyper_8_19_chunk.x2, compress_hyper_8_19_chunk.x5, compress_hyper_8_19_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) -> Sort (actual rows=1 loops=1) - Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x3, _hyper_7_15_chunk.x4 Sort Method: quicksort - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_8_20_chunk.x1, compress_hyper_8_20_chunk.x2, compress_hyper_8_20_chunk.x5, compress_hyper_8_20_chunk._ts_meta_sequence_num + Sort Method: quicksort + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1259,42 +1261,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x3, x4; (10 rows) -- queries where sort is not pushed down -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3; - QUERY PLAN ----------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x3 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x3 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x3; +SELECT * FROM test3 ORDER BY x1, x2, x3 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1309,42 +1312,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x3; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4; - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk.x4 + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk.x4 + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, x4; +SELECT * FROM test3 ORDER BY x1, x2, x5, x4 LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0 @@ -1359,42 +1363,43 @@ SELECT * FROM test3 ORDER BY x1, x2, x5, x4; Sun Jan 09 18:00:00 2000 PST | 2 | 1 | 3 | 3 | 0 (10 rows) -:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time; - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=10 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) +:PREFIX SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- + Limit (actual rows=10 loops=1) + -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) - -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" - Sort Method: quicksort - -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1 loops=1) - Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) - -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) -(30 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_13_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_17_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_13_chunk.x1, _hyper_7_13_chunk.x2, _hyper_7_13_chunk.x5, _hyper_7_13_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_13_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_14_chunk.x1, _hyper_7_14_chunk.x2, _hyper_7_14_chunk.x5, _hyper_7_14_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_14_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_18_chunk (actual rows=1 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_15_chunk (actual rows=3 loops=1) + -> Seq Scan on compress_hyper_8_19_chunk (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_15_chunk.x1, _hyper_7_15_chunk.x2, _hyper_7_15_chunk.x5, _hyper_7_15_chunk."time" + Sort Method: quicksort + -> Seq Scan on _hyper_7_15_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: _hyper_7_16_chunk.x1, _hyper_7_16_chunk.x2, _hyper_7_16_chunk.x5, _hyper_7_16_chunk."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_7_16_chunk (actual rows=1 loops=1) + -> Seq Scan on compress_hyper_8_20_chunk (actual rows=1 loops=1) +(31 rows) -SELECT * FROM test3 ORDER BY x1, x2, x5, time; +SELECT * FROM test3 ORDER BY x1, x2, x5, time LIMIT 10; time | x1 | x2 | x3 | x4 | x5 ------------------------------+----+----+----+----+---- Fri Dec 31 16:00:00 1999 PST | 1 | 2 | 1 | 1 | 0