Indexing 在Timescaledb中使用两列创建一个索引的正确方法

Indexing 在Timescaledb中使用两列创建一个索引的正确方法,indexing,timescaledb,Indexing,Timescaledb,我使用名为Timescaledb的porstgreSQL扩展。我有一个名为timestampdb的表。我想问一下,这是否是用两列(timestamp1,id13)创建一个索引的正确方法。 我使用的一些查询如下所示: select * from timestampdb where timestamp1 >='2020-01-01 00:05:00' and timestamp1<='2020-01-02 00:05:00' and id13>'5', select date_tr

我使用名为Timescaledb的porstgreSQL扩展。我有一个名为
timestampdb
的表。我想问一下,这是否是用两列(timestamp1,id13)创建一个索引的正确方法。 我使用的一些查询如下所示:

select * from timestampdb where timestamp1 >='2020-01-01 00:05:00' and timestamp1<='2020-01-02 00:05:00' and id13>'5',
select date_trunc('hour',timestamp1) as hour,avg(id13) from timestampdb where timestamp1 >='2020-01-01 00:05:00' and timestamp1<='2020-01-02 00:05:00' group by hour order by hour ,
select date_trunc('hour',timestamp1) as hour,max(id13) from timestampdb where timestamp1<='2020-01-01 00:05:00' group by hour order by hour desc limit 5

这是正确的方法吗?这会创建一个包含两列的索引吗?还是在timestam1中创建一个索引,并为(timestam1,id13)创建一个索引。提供的调用将实际创建一个与这两列组合的索引。您需要确保主索引列(即第一列)是时间列。在你的代码里。这样,tsdb查询仍然会按时间首先找到您的数据(这在大型数据集上非常重要)。您的查询也与该索引匹配:它们主要基于时间范围进行搜索

您可能希望通过执行以下命令来检查postgres执行查询的方式 解释分析; 或者使用pgadmin并单击“解释”按钮。 这样,您就可以确保您的索引被命中,以及postgres是否有足够的堆缓冲区来缓存tsdb表页,或者是否需要从磁盘读取(这实际上要慢1000到10000倍)

我总是觉得这些资源很有用: TSDB YT信道:
TSDB Slack Channel:

在PostgreSQL中,创建一个包含所有列的索引,这些列包含在语句中,并按照提供的顺序排列。我建议读@k_rus谢谢你的回答。我已经读了很多遍了,但是我找不到任何解决我问题的方法
create_hypertable("timestampdb",timestamp1) and then CREATE INDEX ON timestampdb (timestamp1,id13)