您可以在数据库上使用索引来加速读取操作。您可以为列的任意组合创建索引。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;
要将索引定义为 UNIQUE
或 PRIMARY KEY
索引,索引必须包含时间列和分区列(如果您正在使用分区列)。例如,唯一索引必须至少包含 (time, location)
列,以及您想要使用的任何其他列。通常,与关系数据相比,时序数据使用 UNIQUE
索引的情况较少。
如果您不想在单个事务中创建索引,可以使用 CREATE_INDEX
函数。这使用单独的函数在每个块上创建索引,而不是为整个超表使用单个事务。这意味着您可以在创建索引时对表执行其他操作,而无需等待索引创建完成。
注意
您还可以使用 PostgreSQL WITH
子句 对单个块执行索引事务。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。