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;
要将索引定义为 UNIQUE
或 PRIMARY KEY
索引,如果正在使用分区列,则索引必须包含时间列和分区列。例如,唯一索引除了您想使用的其他列之外,必须至少包含 (time, location)
列。通常,时序数据使用 UNIQUE
索引的情况比关系型数据少见。
如果您不想在单个事务中创建索引,可以使用 CREATE_INDEX
函数。此函数使用单独的函数为每个块创建索引,而不是为整个超表使用单个事务。这意味着您可以在创建索引的同时对表执行其他操作,而无需等待索引创建完成。
注意
您还可以使用 PostgreSQL WITH
子句 对单个块执行索引事务。
关键词