mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
208 lines
5.3 KiB
SQL
208 lines
5.3 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.
|
|
|
|
SET work_mem TO '50MB';
|
|
|
|
---Lets test for index backward scans instead of seq scans ------------
|
|
-- for ordered append tests on compressed chunks we need a hypertable with time as compress_orderby column
|
|
-- should not have ordered DecompressChunk path because segmentby columns are not part of pathkeys
|
|
|
|
:PREFIX
|
|
SELECT *
|
|
FROM (
|
|
SELECT *
|
|
FROM metrics_ordered_idx
|
|
ORDER BY time DESC
|
|
LIMIT 10) AS q
|
|
ORDER BY 1,
|
|
2,
|
|
3,
|
|
4;
|
|
|
|
-- should have ordered DecompressChunk path because segmentby columns have equality constraints
|
|
:PREFIX
|
|
SELECT *
|
|
FROM (
|
|
SELECT *
|
|
FROM metrics_ordered_idx
|
|
WHERE device_id = 3
|
|
AND device_id_peer = 3
|
|
ORDER BY time DESC
|
|
LIMIT 10) AS q
|
|
ORDER BY 1,
|
|
2,
|
|
3,
|
|
4;
|
|
|
|
:PREFIX SELECT DISTINCT ON (d.device_id)
|
|
*
|
|
FROM metrics_ordered_idx d
|
|
INNER JOIN LATERAL (
|
|
SELECT *
|
|
FROM metrics_ordered_idx m
|
|
WHERE m.device_id = d.device_id
|
|
AND m.device_id_peer = 3
|
|
ORDER BY time DESC
|
|
LIMIT 1) m ON m.device_id_peer = d.device_id_peer
|
|
WHERE extract(minute FROM d.time) = 0;
|
|
|
|
:PREFIX
|
|
SELECT d.device_id,
|
|
m.time,
|
|
m.time
|
|
FROM metrics_ordered_idx d
|
|
INNER JOIN LATERAL (
|
|
SELECT *
|
|
FROM metrics_ordered_idx m
|
|
WHERE m.device_id = d.device_id
|
|
AND m.device_id_peer = 3
|
|
ORDER BY time DESC
|
|
LIMIT 1) m ON m.device_id_peer = d.device_id_peer
|
|
WHERE extract(minute FROM d.time) = 0;
|
|
|
|
--github issue 1558
|
|
SET enable_seqscan = FALSE;
|
|
|
|
SET enable_bitmapscan = FALSE;
|
|
|
|
SET max_parallel_workers_per_gather = 0;
|
|
|
|
SET enable_hashjoin = FALSE;
|
|
|
|
SET enable_mergejoin = FALSE;
|
|
|
|
:PREFIX
|
|
SELECT device_id,
|
|
count(*)
|
|
FROM (
|
|
SELECT *
|
|
FROM metrics_ordered_idx mt,
|
|
nodetime nd
|
|
WHERE mt.time > nd.start_time
|
|
AND mt.device_id = nd.node
|
|
AND mt.time < nd.stop_time) AS subq
|
|
GROUP BY device_id;
|
|
|
|
:PREFIX
|
|
SELECT nd.node,
|
|
mt.*
|
|
FROM metrics_ordered_idx mt,
|
|
nodetime nd
|
|
WHERE mt.time > nd.start_time
|
|
AND mt.device_id = nd.node
|
|
AND mt.time < nd.stop_time
|
|
ORDER BY time;
|
|
|
|
SET enable_seqscan = TRUE;
|
|
|
|
SET enable_bitmapscan = TRUE;
|
|
|
|
SET enable_seqscan = TRUE;
|
|
|
|
SET enable_bitmapscan = TRUE;
|
|
|
|
SET max_parallel_workers_per_gather = 0;
|
|
|
|
SET enable_mergejoin = TRUE;
|
|
|
|
SET enable_hashjoin = FALSE;
|
|
|
|
:PREFIX
|
|
SELECT nd.node,
|
|
mt.*
|
|
FROM metrics_ordered_idx mt,
|
|
nodetime nd
|
|
WHERE mt.time > nd.start_time
|
|
AND mt.device_id = nd.node
|
|
AND mt.time < nd.stop_time
|
|
ORDER BY time;
|
|
|
|
SET enable_mergejoin = FALSE;
|
|
|
|
SET enable_hashjoin = TRUE;
|
|
|
|
:PREFIX
|
|
SELECT nd.node,
|
|
mt.*
|
|
FROM metrics_ordered_idx mt,
|
|
nodetime nd
|
|
WHERE mt.time > nd.start_time
|
|
AND mt.device_id = nd.node
|
|
AND mt.time < nd.stop_time
|
|
ORDER BY time;
|
|
|
|
--enable all joins after the tests
|
|
SET enable_mergejoin = TRUE;
|
|
|
|
SET enable_hashjoin = TRUE;
|
|
|
|
--end github issue 1558
|
|
|
|
-- github issue 2673
|
|
-- nested loop join with parameterized path
|
|
-- join condition has a segment by column and another column.
|
|
SET enable_hashjoin = false;
|
|
SET enable_mergejoin=false;
|
|
SET enable_material = false;
|
|
SET enable_seqscan = false;
|
|
|
|
-- restrict so that we select only 1 chunk.
|
|
:PREFIX
|
|
WITH lookup as ( SELECT * from (values( 3, 5) , (3, 4) ) as lu( did, version) )
|
|
SELECT met.*, lookup.*
|
|
FROM metrics_ordered_idx met join lookup
|
|
ON met.device_id = lookup.did and met.v0 = lookup.version
|
|
WHERE met.time > '2000-01-19 19:00:00-05'
|
|
and met.time < '2000-01-20 20:00:00-05';
|
|
|
|
--add filter to segment by (device_id) and compressed attr column (v0)
|
|
:PREFIX
|
|
WITH lookup as ( SELECT * from (values( 3, 5) , (3, 4) ) as lu( did, version) )
|
|
SELECT met.*, lookup.*
|
|
FROM metrics_ordered_idx met join lookup
|
|
ON met.device_id = lookup.did and met.v0 = lookup.version
|
|
WHERE met.time > '2000-01-19 19:00:00-05'
|
|
and met.time < '2000-01-20 20:00:00-05'
|
|
and met.device_id = 3 and met.v0 = 5;
|
|
|
|
:PREFIX
|
|
WITH lookup as ( SELECT * from (values( 3, 5) , (3, 4) ) as lu( did, version) )
|
|
SELECT met.*, lookup.*
|
|
FROM metrics_ordered_idx met join lookup
|
|
ON met.device_id = lookup.did and met.v0 = lookup.version
|
|
WHERE met.time = '2000-01-19 19:00:00-05'
|
|
and met.device_id = 3
|
|
and met.device_id_peer = 3 and met.v0 = 5;
|
|
|
|
-- lateral subquery
|
|
:PREFIX
|
|
WITH f1 as ( SELECT * from (values( 7, 5, 4) , (4, 5, 5) ) as lu( device_id, device_id_peer, v0) )
|
|
SELECT * FROM metrics_ordered_idx met
|
|
JOIN LATERAL
|
|
( SELECT node, f1.* from nodetime , f1
|
|
WHERE node = f1.device_id) q
|
|
ON met.device_id = q.node and met.device_id_peer = q.device_id_peer
|
|
and met.v0 = q.v0 and met.v0 > 2 and time = '2018-01-19 20:00:00-05';
|
|
|
|
-- filter on compressed attr (v0) with seqscan enabled and indexscan
|
|
-- disabled. filters on compressed attr should be above the seq scan.
|
|
SET enable_seqscan = true;
|
|
SET enable_indexscan = false;
|
|
:PREFIX
|
|
WITH lookup as ( SELECT * from (values( 3, 5) , (3, 4) ) as lu( did, version) )
|
|
SELECT met.*, lookup.*
|
|
FROM metrics_ordered_idx met join lookup
|
|
ON met.device_id = lookup.did and met.v0 = lookup.version
|
|
and met.device_id = 3
|
|
WHERE met.time > '2000-01-19 19:00:00-05'
|
|
and met.time < '2000-01-20 20:00:00-05'
|
|
and met.device_id = 3
|
|
and met.device_id_peer = 3 and met.v0 = 5;
|
|
|
|
RESET enable_hashjoin ;
|
|
RESET enable_mergejoin;
|
|
RESET enable_material ;
|
|
RESET enable_indexscan ;
|
|
--end github issue 2673
|