mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-23 06:22:03 +08:00
Fix transparent decompression sort interaction
The sort optimization adds a new index path to the pathlist of rel with the modified pathkeys. This optimization needs to happen before the DecompressChunk paths get generated otherwise those paths will survive in pathlist and a query on a compressed chunk will target the empty chunk of the uncompressed hypertable.
This commit is contained in:
parent
7b570b0dab
commit
4d12f5b8f3
@ -407,7 +407,8 @@ TSDLLEXPORT CrossModuleFunctions ts_cm_functions_default = {
|
|||||||
.remove_reorder_policy = error_no_default_fn_pg_enterprise,
|
.remove_reorder_policy = error_no_default_fn_pg_enterprise,
|
||||||
.remove_compress_chunks_policy = error_no_default_fn_pg_community,
|
.remove_compress_chunks_policy = error_no_default_fn_pg_community,
|
||||||
.create_upper_paths_hook = NULL,
|
.create_upper_paths_hook = NULL,
|
||||||
.set_rel_pathlist_hook = NULL,
|
.set_rel_pathlist_dml = NULL,
|
||||||
|
.set_rel_pathlist_query = NULL,
|
||||||
.gapfill_marker = error_no_default_fn_pg_community,
|
.gapfill_marker = error_no_default_fn_pg_community,
|
||||||
.gapfill_int16_time_bucket = error_no_default_fn_pg_community,
|
.gapfill_int16_time_bucket = error_no_default_fn_pg_community,
|
||||||
.gapfill_int32_time_bucket = error_no_default_fn_pg_community,
|
.gapfill_int32_time_bucket = error_no_default_fn_pg_community,
|
||||||
|
@ -45,8 +45,9 @@ typedef struct CrossModuleFunctions
|
|||||||
Datum (*remove_reorder_policy)(PG_FUNCTION_ARGS);
|
Datum (*remove_reorder_policy)(PG_FUNCTION_ARGS);
|
||||||
Datum (*remove_compress_chunks_policy)(PG_FUNCTION_ARGS);
|
Datum (*remove_compress_chunks_policy)(PG_FUNCTION_ARGS);
|
||||||
void (*create_upper_paths_hook)(PlannerInfo *, UpperRelationKind, RelOptInfo *, RelOptInfo *);
|
void (*create_upper_paths_hook)(PlannerInfo *, UpperRelationKind, RelOptInfo *, RelOptInfo *);
|
||||||
void (*set_rel_pathlist_hook)(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *,
|
void (*set_rel_pathlist_dml)(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *);
|
||||||
bool isdml);
|
void (*set_rel_pathlist_query)(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *,
|
||||||
|
Hypertable *);
|
||||||
PGFunction gapfill_marker;
|
PGFunction gapfill_marker;
|
||||||
PGFunction gapfill_int16_time_bucket;
|
PGFunction gapfill_int16_time_bucket;
|
||||||
PGFunction gapfill_int32_time_bucket;
|
PGFunction gapfill_int32_time_bucket;
|
||||||
|
@ -343,15 +343,15 @@ timescaledb_set_rel_pathlist_query(PlannerInfo *root, RelOptInfo *rel, Index rti
|
|||||||
if (!should_optimize_query(ht))
|
if (!should_optimize_query(ht))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ts_guc_optimize_non_hypertables)
|
/*
|
||||||
{
|
* Since the sort optimization adds new paths to the rel it has
|
||||||
/* if optimizing all tables, apply optimization to any table */
|
* to happen before any optimizations that replace pathlist.
|
||||||
|
*/
|
||||||
|
if (ts_guc_optimize_non_hypertables || (ht != NULL && is_append_child(rel, rte)))
|
||||||
ts_sort_transform_optimization(root, rel);
|
ts_sort_transform_optimization(root, rel);
|
||||||
}
|
|
||||||
else if (ht != NULL && is_append_child(rel, rte))
|
if (ts_cm_functions->set_rel_pathlist_query != NULL)
|
||||||
{
|
ts_cm_functions->set_rel_pathlist_query(root, rel, rti, rte, ht);
|
||||||
ts_sort_transform_optimization(root, rel);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
/*
|
/*
|
||||||
@ -455,12 +455,16 @@ timescaledb_set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, Index rti, Rang
|
|||||||
|
|
||||||
ht = ts_hypertable_cache_get_entry(hcache, ht_reloid);
|
ht = ts_hypertable_cache_get_entry(hcache, ht_reloid);
|
||||||
|
|
||||||
if (ts_cm_functions->set_rel_pathlist_hook != NULL)
|
|
||||||
ts_cm_functions->set_rel_pathlist_hook(root, rel, rti, rte, ht, is_htdml);
|
|
||||||
if (!is_htdml)
|
if (!is_htdml)
|
||||||
{
|
{
|
||||||
timescaledb_set_rel_pathlist_query(root, rel, rti, rte, ht);
|
timescaledb_set_rel_pathlist_query(root, rel, rti, rte, ht);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ts_cm_functions->set_rel_pathlist_dml != NULL)
|
||||||
|
ts_cm_functions->set_rel_pathlist_dml(root, rel, rti, rte, ht);
|
||||||
|
}
|
||||||
|
|
||||||
ts_cache_release(hcache);
|
ts_cache_release(hcache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,8 @@ CrossModuleFunctions tsl_cm_functions = {
|
|||||||
.remove_reorder_policy = reorder_remove_policy,
|
.remove_reorder_policy = reorder_remove_policy,
|
||||||
.remove_compress_chunks_policy = compress_chunks_remove_policy,
|
.remove_compress_chunks_policy = compress_chunks_remove_policy,
|
||||||
.create_upper_paths_hook = tsl_create_upper_paths_hook,
|
.create_upper_paths_hook = tsl_create_upper_paths_hook,
|
||||||
.set_rel_pathlist_hook = tsl_set_rel_pathlist_hook,
|
.set_rel_pathlist_dml = tsl_set_rel_pathlist_dml,
|
||||||
|
.set_rel_pathlist_query = tsl_set_rel_pathlist_query,
|
||||||
.gapfill_marker = gapfill_marker,
|
.gapfill_marker = gapfill_marker,
|
||||||
.gapfill_int16_time_bucket = gapfill_int16_time_bucket,
|
.gapfill_int16_time_bucket = gapfill_int16_time_bucket,
|
||||||
.gapfill_int32_time_bucket = gapfill_int32_time_bucket,
|
.gapfill_int32_time_bucket = gapfill_int32_time_bucket,
|
||||||
|
@ -29,10 +29,21 @@ tsl_create_upper_paths_hook(PlannerInfo *root, UpperRelationKind stage, RelOptIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tsl_set_rel_pathlist_hook(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte,
|
tsl_set_rel_pathlist_query(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte,
|
||||||
Hypertable *ht, bool isdml)
|
Hypertable *ht)
|
||||||
{
|
{
|
||||||
if (isdml)
|
if (ts_guc_enable_transparent_decompression && ht != NULL &&
|
||||||
|
rel->reloptkind == RELOPT_OTHER_MEMBER_REL && ht->fd.compressed_hypertable_id > 0)
|
||||||
|
{
|
||||||
|
Chunk *chunk = ts_chunk_get_by_relid(rte->relid, 0, true);
|
||||||
|
|
||||||
|
if (chunk->fd.compressed_chunk_id > 0)
|
||||||
|
ts_decompress_chunk_generate_paths(root, rel, ht, chunk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void
|
||||||
|
tsl_set_rel_pathlist_dml(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte,
|
||||||
|
Hypertable *ht)
|
||||||
{
|
{
|
||||||
if (ht != NULL && TS_HYPERTABLE_HAS_COMPRESSION_ON(ht))
|
if (ht != NULL && TS_HYPERTABLE_HAS_COMPRESSION_ON(ht))
|
||||||
{
|
{
|
||||||
@ -52,15 +63,3 @@ tsl_set_rel_pathlist_hook(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (ts_guc_enable_transparent_decompression && ht != NULL &&
|
|
||||||
rel->reloptkind == RELOPT_OTHER_MEMBER_REL && ht->fd.compressed_hypertable_id > 0)
|
|
||||||
{
|
|
||||||
Chunk *chunk = ts_chunk_get_by_relid(rte->relid, 0, true);
|
|
||||||
|
|
||||||
if (chunk->fd.compressed_chunk_id > 0)
|
|
||||||
ts_decompress_chunk_generate_paths(root, rel, ht, chunk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "hypertable.h"
|
#include "hypertable.h"
|
||||||
|
|
||||||
void tsl_create_upper_paths_hook(PlannerInfo *, UpperRelationKind, RelOptInfo *, RelOptInfo *);
|
void tsl_create_upper_paths_hook(PlannerInfo *, UpperRelationKind, RelOptInfo *, RelOptInfo *);
|
||||||
void tsl_set_rel_pathlist_hook(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *,
|
void tsl_set_rel_pathlist_query(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *);
|
||||||
bool isdml);
|
void tsl_set_rel_pathlist_dml(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *);
|
||||||
|
|
||||||
#endif /* TIMESCALEDB_TSL_PLANNER_H */
|
#endif /* TIMESCALEDB_TSL_PLANNER_H */
|
||||||
|
@ -43,10 +43,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- compress first and last chunk on the hypertable
|
-- compress first and last chunk on the hypertable
|
||||||
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
||||||
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
||||||
@ -125,10 +125,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- look at postgres version to decide whether we run with analyze or without
|
-- look at postgres version to decide whether we run with analyze or without
|
||||||
SELECT
|
SELECT
|
||||||
CASE WHEN current_setting('server_version_num')::int >= 100000
|
CASE WHEN current_setting('server_version_num')::int >= 100000
|
||||||
@ -872,6 +872,56 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
(14 rows)
|
(14 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
----------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics (actual rows=10 loops=1)
|
||||||
|
Order: metrics."time" DESC
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_1_1_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (never executed)
|
||||||
|
(14 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=7200 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (actual rows=10 loops=1)
|
||||||
|
(10 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=7200 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (actual rows=10 loops=1)
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
(10 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -2226,8 +2276,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -3363,6 +3413,128 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
Filter: ("time" < now())
|
Filter: ("time" < now())
|
||||||
(31 rows)
|
(31 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics_space (actual rows=10 loops=1)
|
||||||
|
Order: metrics_space."time" DESC
|
||||||
|
-> Merge Append (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=3 loops=1)
|
||||||
|
Heap Fetches: 3
|
||||||
|
-> Sort (actual rows=6 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Sort (actual rows=6048 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: quicksort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Sort (actual rows=3 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Sort (actual rows=2016 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: quicksort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Merge Append (never executed)
|
||||||
|
Sort Key: _hyper_2_9_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Merge Append (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (never executed)
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (never executed)
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (never executed)
|
||||||
|
(51 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC, _hyper_2_12_chunk.device_id
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_12_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_9_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_8_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_7_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (actual rows=2 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=4320 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (actual rows=6 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (actual rows=2 loops=1)
|
||||||
|
(19 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Merge Append (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (actual rows=2 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=4320 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (actual rows=6 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (actual rows=2 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
(36 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -5306,8 +5478,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -43,10 +43,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- compress first and last chunk on the hypertable
|
-- compress first and last chunk on the hypertable
|
||||||
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
||||||
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
||||||
@ -125,10 +125,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- look at postgres version to decide whether we run with analyze or without
|
-- look at postgres version to decide whether we run with analyze or without
|
||||||
SELECT
|
SELECT
|
||||||
CASE WHEN current_setting('server_version_num')::int >= 100000
|
CASE WHEN current_setting('server_version_num')::int >= 100000
|
||||||
@ -872,6 +872,56 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
(14 rows)
|
(14 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
----------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics (actual rows=10 loops=1)
|
||||||
|
Order: metrics."time" DESC
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_1_1_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (never executed)
|
||||||
|
(14 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=7200 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (actual rows=10 loops=1)
|
||||||
|
(10 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=7200 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk (actual rows=10 loops=1)
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=10080 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk (actual rows=15 loops=1)
|
||||||
|
(10 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -2316,8 +2366,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -3453,6 +3503,128 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
Filter: ("time" < now())
|
Filter: ("time" < now())
|
||||||
(31 rows)
|
(31 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics_space (actual rows=10 loops=1)
|
||||||
|
Order: metrics_space."time" DESC
|
||||||
|
-> Merge Append (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=3 loops=1)
|
||||||
|
Heap Fetches: 3
|
||||||
|
-> Sort (actual rows=6 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Sort (actual rows=6048 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: quicksort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Sort (actual rows=3 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Sort (actual rows=2016 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: quicksort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Merge Append (never executed)
|
||||||
|
Sort Key: _hyper_2_9_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed)
|
||||||
|
Heap Fetches: 0
|
||||||
|
-> Merge Append (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (never executed)
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (never executed)
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort (never executed)
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (never executed)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (never executed)
|
||||||
|
(51 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC, _hyper_2_12_chunk.device_id
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Append (actual rows=27360 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_12_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_9_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_8_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on _hyper_2_7_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (actual rows=2 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=4320 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (actual rows=6 loops=1)
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (actual rows=2 loops=1)
|
||||||
|
(19 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Limit (actual rows=10 loops=1)
|
||||||
|
-> Merge Append (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk (actual rows=2 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=4320 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk (actual rows=6 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1440 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk (actual rows=2 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
-> Sort (actual rows=10 loops=1)
|
||||||
|
Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=2016 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk (actual rows=3 loops=1)
|
||||||
|
-> Sort (actual rows=1 loops=1)
|
||||||
|
Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC
|
||||||
|
Sort Method: top-N heapsort
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=6048 loops=1)
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk (actual rows=9 loops=1)
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (actual rows=1 loops=1)
|
||||||
|
Heap Fetches: 1
|
||||||
|
(36 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -5410,8 +5582,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -43,10 +43,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- compress first and last chunk on the hypertable
|
-- compress first and last chunk on the hypertable
|
||||||
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby='v0, v1 desc, time', timescaledb.compress_segmentby='device_id,device_id_peer');
|
||||||
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
NOTICE: adding index _compressed_hypertable_5_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_5 USING BTREE(device_id, _ts_meta_sequence_num)
|
||||||
@ -125,10 +125,10 @@ ANALYZE metrics_space;
|
|||||||
\set PREFIX ''
|
\set PREFIX ''
|
||||||
\set PREFIX_VERBOSE ''
|
\set PREFIX_VERBOSE ''
|
||||||
\set ECHO none
|
\set ECHO none
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
-- look at postgres version to decide whether we run with analyze or without
|
-- look at postgres version to decide whether we run with analyze or without
|
||||||
SELECT
|
SELECT
|
||||||
CASE WHEN current_setting('server_version_num')::int >= 100000
|
CASE WHEN current_setting('server_version_num')::int >= 100000
|
||||||
@ -782,6 +782,52 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
-> Seq Scan on compress_hyper_5_16_chunk
|
-> Seq Scan on compress_hyper_5_16_chunk
|
||||||
(13 rows)
|
(13 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-----------------------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics
|
||||||
|
Order: metrics."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk
|
||||||
|
-> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_1_1_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk
|
||||||
|
(12 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id
|
||||||
|
-> Append
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk
|
||||||
|
(9 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC
|
||||||
|
-> Append
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_1_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_15_chunk
|
||||||
|
-> Seq Scan on _hyper_1_2_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_1_3_chunk
|
||||||
|
-> Seq Scan on compress_hyper_5_16_chunk
|
||||||
|
(9 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -2005,8 +2051,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -3011,6 +3057,110 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
Filter: ("time" < now())
|
Filter: ("time" < now())
|
||||||
(30 rows)
|
(30 rows)
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Custom Scan (ChunkAppend) on metrics_space
|
||||||
|
Order: metrics_space."time" DESC
|
||||||
|
-> Merge Append
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_11_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_10_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk
|
||||||
|
-> Merge Append
|
||||||
|
Sort Key: _hyper_2_9_chunk."time" DESC
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk
|
||||||
|
-> Merge Append
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk
|
||||||
|
(43 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_12_chunk."time" DESC, _hyper_2_12_chunk.device_id
|
||||||
|
-> Append
|
||||||
|
-> Seq Scan on _hyper_2_12_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk
|
||||||
|
-> Seq Scan on _hyper_2_9_chunk
|
||||||
|
-> Seq Scan on _hyper_2_8_chunk
|
||||||
|
-> Seq Scan on _hyper_2_7_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk
|
||||||
|
(18 rows)
|
||||||
|
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
QUERY PLAN
|
||||||
|
-----------------------------------------------------------------------------------------------------------
|
||||||
|
Limit
|
||||||
|
-> Merge Append
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_4_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_17_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_5_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_18_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_6_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_19_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_10_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_20_chunk
|
||||||
|
-> Sort
|
||||||
|
Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC
|
||||||
|
-> Custom Scan (DecompressChunk) on _hyper_2_11_chunk
|
||||||
|
-> Seq Scan on compress_hyper_6_21_chunk
|
||||||
|
-> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk
|
||||||
|
(27 rows)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
@ -4785,8 +4935,8 @@ DEALLOCATE param_prep;
|
|||||||
SET client_min_messages TO error;
|
SET client_min_messages TO error;
|
||||||
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
CREATE VIEW cagg_test WITH (timescaledb.continuous) AS SELECT time_bucket('1d',time) AS time, device_id, avg(v1) FROM :TEST_TABLE WHERE device_id=1 GROUP BY 1,2;
|
||||||
REFRESH MATERIALIZED VIEW cagg_test;
|
REFRESH MATERIALIZED VIEW cagg_test;
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
psql:include/transparent_decompression_query.sql:267: INFO: new materialization range for public.metrics_space (time column time) (948067200000000)
|
||||||
psql:include/transparent_decompression_query.sql:261: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
psql:include/transparent_decompression_query.sql:267: INFO: materializing continuous aggregate public.cagg_test: new range up to 948067200000000
|
||||||
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
SELECT time FROM cagg_test ORDER BY time LIMIT 1;
|
||||||
time
|
time
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -98,6 +98,12 @@ FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|||||||
--functions not yet optimized
|
--functions not yet optimized
|
||||||
:PREFIX SELECT * FROM :TEST_TABLE WHERE time < now() ORDER BY time, device_id LIMIT 10;
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE time < now() ORDER BY time, device_id LIMIT 10;
|
||||||
|
|
||||||
|
-- test sort optimization interaction
|
||||||
|
|
||||||
|
:PREFIX SELECT time FROM :TEST_TABLE ORDER BY time DESC LIMIT 10;
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10;
|
||||||
|
:PREFIX SELECT time,device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- test ordered path
|
-- test ordered path
|
||||||
--
|
--
|
||||||
|
Loading…
x
Reference in New Issue
Block a user