在 Nebula Graph 中,为 STRING 类型字段创建索引时确实需要指定索引长度。这是因为 Nebula Graph 要求对字符串类型的索引进行前缀长度限制,以优化索引性能和存储空间。
当为 STRING 类型字段创建索引时,需要在字段名后使用 (length) 语法指定索引前缀长度:
CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name>
ON {<tag_name> | <edge_name>} (<field_name>(length) [, <field_name>(length)]*);
假设你有一个 player TAG 包含 name 字段(类型为 STRING),现在要为该字段创建索引:
-
足够覆盖常用查询:选择的长度应足够覆盖大部分查询可能涉及的字符串前缀。例如,如果大多数查询会匹配名字的前几个字符,选择 16-32 通常足够。
-
平衡性能与空间:
- 较长的索引前缀提供更精确的匹配,但会增加索引大小和查询开销。
- 较短的前缀节省空间,但可能导致更多的索引扫描。
-
中文等多字节字符:如果存储中文或其他多字节字符,需考虑字符编码(如 UTF-8 中一个汉字通常占 3 字节)。例如,若希望覆盖 10 个汉字,可设置长度为 30。
创建并重建索引后,可以验证其状态:
-
索引长度限制:Nebula Graph 对字符串索引前缀长度有限制(具体取决于版本,通常最大为 256 字节)。
-
查询时的索引匹配:只有当查询条件中的字符串长度不超过索引前缀长度时,索引才会生效。例如:
通过合理设置字符串索引长度,你可以在 Nebula Graph 中高效地查询文本数据。