【发布时间】:2021-03-06 23:59:08
【问题描述】:
我想在 postgres 时间刻度中创建一个超表。
我要做的是 CREATE TABLE,然后是 CREATE INDEX,最后是 SELECT CREATE_HYPERTABLE。
我的问题:CREATE INDEX 对于超表的高性能是必要的、有帮助的还是有问题的?
【问题讨论】:
标签: postgresql indexing timescaledb
我想在 postgres 时间刻度中创建一个超表。
我要做的是 CREATE TABLE,然后是 CREATE INDEX,最后是 SELECT CREATE_HYPERTABLE。
我的问题:CREATE INDEX 对于超表的高性能是必要的、有帮助的还是有问题的?
【问题讨论】:
标签: postgresql indexing timescaledb
简而言之:不需要创建索引,因为 TimescaleDB 默认会在时间维度上创建索引。根据您的使用情况,您可能希望创建索引来加速选择查询,最好在创建超表后创建它们。
更多详情:
使用create_hypertable function 创建超表会将原始 PotgreSQL 表替换为新表。因此最好先创建超表,然后再创建索引。它也可以先创建索引,然后调用create_hypertable。在这种情况下,将在超表上重新创建现有索引。重要的是要记住唯一索引和主键需要包含时间维度列。并且注意create_hypertable默认会在时间维度列上创建索引。
一般来说,创建索引的注意事项与 PostgreSQL 类似:在使用索引时需要权衡取舍。索引在数据摄取期间引入了开销,同时可以显着改进选择查询。我建议检查the best practice of using indexes in TimescaleDB 和the blog about using composite indexes for time-series queries
【讨论】:
Boolean whether to create default indexes on time/partitioning columns. Default is TRUE. 将这个参数 create_default_indexes 设置为 FALSE