您可以在数据库上使用索引来加速读取操作。您可以为列的任意组合创建索引。Timescale 支持 PostgreSQL 中支持的所有表对象,包括数据类型、索引和触发器。

您可以使用 CREATE INDEX 命令创建索引。例如,要创建一个首先按 location 排序,然后按 time 降序排序的索引

CREATE INDEX ON conditions (location, time DESC);

您可以在将常规 PostgreSQL 表转换为超表之前或之后运行此命令。

当您对数据库执行某些操作时,默认情况下会创建一些索引。

当您使用 create_hypertable 命令创建超表时,会在您的数据上创建时间索引。如果您想手动创建时间索引,可以使用此命令

CREATE INDEX ON conditions (time DESC);

当您使用 create_hypertable 命令创建超表,并且除了时间之外还指定了一个可选的哈希分区(例如 location 列)时,会在可选列和时间上创建一个额外的索引。例如

CREATE INDEX ON conditions (location, time DESC);

有关声明索引时使用的顺序的更多信息,请参阅关于索引部分。

如果您不想创建这些默认索引,您可以在运行 create_hypertable 命令时将 create_default_indexes 设置为 false。例如

SELECT create_hypertable('conditions', by_range('time'))
CREATE_DEFAULT_INDEXES false;
注意

by_range 维度构建器是 TimescaleDB 2.13 的新增功能。

如果您的数据稀疏,并且列经常为 NULL,则可以向索引添加一个子句,声明 WHERE column IS NOT NULL。这可以防止索引对 NULL 数据进行索引,从而可以生成更紧凑和高效的索引。例如

CREATE INDEX ON conditions (time DESC, humidity)
WHERE humidity IS NOT NULL;

要将索引定义为 UNIQUEPRIMARY KEY 索引,索引必须包含时间列和分区列(如果您正在使用分区列)。例如,唯一索引必须至少包含 (time, location) 列,以及您想要使用的任何其他列。通常,与关系数据相比,时序数据使用 UNIQUE 索引的情况较少。

如果您不想在单个事务中创建索引,可以使用 CREATE_INDEX 函数。这使用单独的函数在每个块上创建索引,而不是为整个超表使用单个事务。这意味着您可以在创建索引时对表执行其他操作,而无需等待索引创建完成。

注意

您还可以使用 PostgreSQL WITH 子句 对单个块执行索引事务。

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页