Schema 索引

  1. CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} (prop_name_list)

schema 索引可用于快速处理图查询。Nebula Graph 支持两种类型的索引:Tag 索引Edge Type 索引

多数图查询都从拥有共同属性的同一类型的点或边开始遍历。schema 索引使得这些全局检索操作在大型图上更为高效。

一般地,在使用 CREATE TAG/EDGE 语句将 Tag/Edge-type 创建好之后,即可为其创建索引。

创建索引

CREATE INDEX 用于为已有 Tag/Edge-type 创建索引。

创建单属性索引

  1. nebula> CREATE TAG INDEX player_index_0 on player(name);

上述语句在所有标签为 player 的顶点上为属性 name 创建了一个索引。

  1. nebula> CREATE EDGE INDEX follow_index_0 on follow(degree);

上述语句在 follow 边类型的所有边上为属性 degree 创建了一个索引。

创建组合索引

schema 索引还支持为相同 tag 或 edge 中的多个属性同时创建索引。这种包含多种属性的索引在 Nebula Graph 中称为组合索引。

注意: 目前尚不支持跨多个 tag 创建复合索引。

  1. nebula> CREATE TAG INDEX player_index_1 on player(name,age);

上述语句在所有标签为 player 的顶点上为属性 nameage 创建了一个复合索引。

列出索引

  1. SHOW {TAG | EDGE} INDEXES

SHOW INDEXES 用于列出已创建完成的 Tag/Edge-type 的索引信息。使用以下命令列出索引:

  1. nebula> SHOW TAG INDEXES;
  2. =============================
  3. | Index ID | Index Name |
  4. =============================
  5. | 22 | player_index_0 |
  6. -----------------------------
  7. | 23 | player_index_1 |
  8. -----------------------------
  9. nebula> SHOW EDGE INDEXES;
  10. =============================
  11. | Index ID | Index Name |
  12. =============================
  13. | 24 | follow_index_0 |
  14. -----------------------------

返回索引信息

  1. DESCRIBE {TAG | EDGE} INDEX <index_name>

DESCRIBE INDEX 用于返回指定索引信息。例如,使用以下命令返回索引信息:

  1. nebula> DESCRIBE TAG INDEX player_index_0;
  2. ==================
  3. | Field | Type |
  4. ==================
  5. | name | string |
  6. ------------------
  7. nebula> DESCRIBE TAG INDEX player_index_1;
  8. ==================
  9. | Field | Type |
  10. ==================
  11. | name | string |
  12. ------------------
  13. | age | int |
  14. ------------------

删除索引

  1. DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name>

DROP INDEX 用于删除指定名称的 Tag/Edge-type 索引。例如,使用以下命令删除名为 player_index_0 的索引:

  1. nebula> DROP TAG INDEX player_index_0;

重构索引

  1. REBUILD {TAG | EDGE} INDEX <index_name> [OFFLINE]

创建索引部分介绍了如何创建索引以提高查询性能。如果索引在插入数据之前创建,此时无需执行索引重构操作;如果创建索引时,数据库里已经存有数据,则不会自动对旧的数据进行索引,此时需要对整个图中与索引相关的数据执行索引重构操作以保证索引包含了之前的数据。若当前数据库没有对外提供服务,则可在索引重构时使用 OFFLINE 关键字加快重构速度。

重构完成后,可使用 SHOW {TAG | EDGE} INDEX STATUS 命令查看索引是否重构成功。例如:

  1. nebula> CREATE TAG person(name string, age int, gender string, email string);
  2. Execution succeeded (Time spent: 10.051/11.397 ms)
  3. nebula> CREATE TAG INDEX single_person_index ON person(name);
  4. Execution succeeded (Time spent: 2.168/3.379 ms)
  5. nebula> REBUILD TAG INDEX single_person_index OFFLINE;
  6. Execution succeeded (Time spent: 2.352/3.568 ms)
  7. nebula> SHOW TAG INDEX STATUS;
  8. ==========================================
  9. | Name | Tag Index Status |
  10. ==========================================
  11. | single_person_index | SUCCEEDED |
  12. ------------------------------------------

使用索引

索引创建完成并插入相关数据后,即可使用 LOOKUP 语句进行数据查询。

通常无需指定在查询中具体使用的索引,Nebula Graph 会自行选择。