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








