Timescale 云:性能、规模、企业级

自托管产品

MST

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

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

CREATE INDEX ON conditions (location, time DESC);

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

当您在数据库上执行某些操作时,会默认创建一些索引。

当您通过调用 CREATE TABLE 创建超表时,会在您的数据上创建一个时间索引。如果您想手动创建时间索引,可以使用此命令:

CREATE INDEX ON conditions (time DESC);

创建超表后,除了时间之外,您还可以指定一个可选的哈希分区。例如,add_dimension('conditions', by_hash('location', 4))。在可选列和时间上会创建一个额外的索引。例如:

CREATE INDEX ON conditions (location, time DESC);

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

如果您不想创建这些默认索引,可以在创建超表时将 create_default_indexes 设置为 false。例如:

CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
device TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
) WITH (
tsdb.hypertable,
tsdb.partition_column='time',
tsdb.create_default_indexes=false
);

如果您的数据稀疏,并且有经常为 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。