mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-25 15:50:27 +08:00
This PR reduces the dataset size in the transparent_decompression test to make it finish in a more reasonable time. It also splits the test and modifies queries that used now(). Due to the change in dataset size the resulting diff is rather large but is mostly row count changes in the plan but the actual plan shapes don't change. In addition to those changes to some LATERAL queries additional constraints have been added to reduce the number of loops.
109 lines
2.4 KiB
SQL
109 lines
2.4 KiB
SQL
-- This file and its contents are licensed under the Timescale License.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-TIMESCALE for a copy of the license.
|
|
|
|
--- TEST for constraint aware append ------------
|
|
--should select only newly added chunk --
|
|
|
|
SET timescaledb.enable_chunk_append TO FALSE;
|
|
|
|
:PREFIX
|
|
SELECT *
|
|
FROM (
|
|
SELECT *
|
|
FROM metrics_ordered_idx
|
|
WHERE time > '2002-01-01'
|
|
AND time < now()
|
|
ORDER BY time DESC
|
|
LIMIT 10) AS q
|
|
ORDER BY 1,
|
|
2,
|
|
3,
|
|
4;
|
|
|
|
-- DecompressChunk path because segmentby columns have equality constraints
|
|
:PREFIX
|
|
SELECT *
|
|
FROM (
|
|
SELECT *
|
|
FROM metrics_ordered_idx
|
|
WHERE device_id = 4
|
|
AND device_id_peer = 5
|
|
AND time > '2002-01-01'
|
|
AND time < now()
|
|
ORDER BY time DESC
|
|
LIMIT 10) AS q
|
|
ORDER BY 1,
|
|
2,
|
|
3,
|
|
4;
|
|
|
|
:PREFIX
|
|
SELECT m.device_id,
|
|
d.v0,
|
|
count(*)
|
|
FROM metrics_ordered_idx d,
|
|
metrics_ordered_idx m
|
|
WHERE m.device_id = d.device_id
|
|
AND m.device_id_peer = 5
|
|
AND m.time = d.time
|
|
AND m.time > '2002-01-01'
|
|
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
|
|
AND m.device_id_peer = d.device_id_peer
|
|
GROUP BY m.device_id,
|
|
d.v0
|
|
ORDER BY 1,
|
|
2,
|
|
3;
|
|
|
|
--query with no results --
|
|
:PREFIX
|
|
SELECT m.device_id,
|
|
d.v0,
|
|
count(*)
|
|
FROM metrics_ordered_idx d,
|
|
metrics_ordered_idx m
|
|
WHERE m.time = d.time
|
|
AND m.time > '2000-01-01 0:00:00+0'::text::timestamptz
|
|
GROUP BY m.device_id,
|
|
d.v0
|
|
ORDER BY 1,
|
|
2,
|
|
3;
|
|
|
|
--query with all chunks but 1 excluded at plan time --
|
|
:PREFIX
|
|
SELECT d.*,
|
|
m.*
|
|
FROM device_tbl d,
|
|
metrics_ordered_idx m
|
|
WHERE m.device_id = d.device_id
|
|
AND m.time > '2019-01-01'
|
|
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
|
|
ORDER BY m.v0;
|
|
|
|
-- no matches in metrics_ordered_idx but one row in device_tbl
|
|
:PREFIX
|
|
SELECT d.*,
|
|
m.*
|
|
FROM device_tbl d
|
|
LEFT OUTER JOIN metrics_ordered_idx m ON m.device_id = d.device_id
|
|
AND m.time > '2019-01-01'
|
|
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
|
|
WHERE d.device_id = 8
|
|
ORDER BY m.v0;
|
|
|
|
-- no matches in device_tbl but 1 row in metrics_ordered_idx
|
|
:PREFIX
|
|
SELECT d.*,
|
|
m.*
|
|
FROM device_tbl d
|
|
FULL OUTER JOIN metrics_ordered_idx m ON m.device_id = d.device_id
|
|
AND m.time > '2019-01-01'
|
|
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
|
|
WHERE m.device_id = 7
|
|
ORDER BY m.v0;
|
|
|
|
SET timescaledb.enable_chunk_append TO TRUE;
|
|
|