跳到主要内容

标签索引

本节说明 TDengine 的标签索引机制。在 v3.0.3.0 之前,默认仅在第一列标签(TAG)上建立索引,且不支持为其它标签列动态添加索引。自 v3.0.3.0 起,可为其它标签列动态添加索引。第一列标签上自动建立的索引在查询中默认生效,且不可由用户干预其创建过程。合理使用索引有助于提升查询性能。

创建索引

CREATE INDEX [IF NOT EXISTS] index_name ON tbl_name (tag_col_name);
  • index_name:索引名称。
  • tbl_name:超级表名称。
  • tag_col_name:要建立索引的标签列名称;类型不限,任意类型的标签列均可建索引。

删除索引

DROP INDEX [IF EXISTS] index_name;

index_name 为已存在的索引名。若索引不存在且未使用 IF EXISTS,命令会失败,但不会对其它对象产生影响。

查看索引

可通过系统表查询已有索引(也可加过滤条件缩小范围):

SELECT * FROM information_schema.ins_indexes;

系统表列说明参见 INS_INDEXES

也可通过 SHOW 查看指定表上的索引:

SHOW INDEXES FROM tbl_name [FROM db_name];
SHOW INDEXES FROM [db_name.]tbl_name;

使用说明

  1. 索引使用得当可提升数据过滤效率。当前对查询过滤有明显帮助的算子包括 =>>=<<=。若过滤条件使用其它算子,索引可能无法生效,查询效率无明显变化。
  2. 同一标签列只能建立一个索引;重复创建会报错。
  3. 每次只能针对一个标签列建索引,不能一次对多个标签列建索引。
  4. 无论索引类型如何,名称在整个系统中必须唯一。
  5. 索引个数没有硬性上限,但每增加一个索引都会增加元数据;索引过多会降低元数据存取效率,进而影响系统性能。请避免添加不必要的索引。
  6. 不支持对普通表和子表建立索引。
  7. 若某标签列的唯一值较少,通常不必建索引,收益有限。
  8. 新建超级表时,会为第一列标签自动生成索引名(规则为:该标签列名 + 23 个字节的后缀)。可在系统表中查看,也可按需 DROP;行为与其它标签列上的索引一致。