跳转至

Schema 索引Graph

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

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

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

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

创建索引Graph

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

注意:索引会影响写性能,第一次批量导入的时候,建议先导入数据,再批量重建索引;不推荐带索引批量导入,这样写性能会非常差。

创建单属性索引Graph

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

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

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

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

创建组合索引Graph

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

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

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

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

列出索引Graph

SHOW {TAG | EDGE} INDEXES

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

nebula> SHOW TAG INDEXES;
=============================
| Index ID | Index Name     |
=============================
| 22       | player_index_0 |
-----------------------------
| 23       | player_index_1 |
-----------------------------

nebula> SHOW EDGE INDEXES;
=============================
| Index ID | Index Name     |
=============================
| 24       | follow_index_0 |
-----------------------------

返回索引信息Graph

DESCRIBE {TAG | EDGE} INDEX <index_name>

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

nebula> DESCRIBE TAG INDEX player_index_0;
==================
| Field | Type   |
==================
| name  | string |
------------------

nebula> DESCRIBE TAG INDEX player_index_1;
==================
| Field | Type   |
==================
| name  | string |
------------------
| age   | int    |
------------------

删除索引Graph

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

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

nebula> DROP TAG INDEX player_index_0;

重构索引Graph

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

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

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

nebula> CREATE TAG person(name string, age int, gender string, email string);
Execution succeeded (Time spent: 10.051/11.397 ms)

nebula> CREATE TAG INDEX single_person_index ON person(name);
Execution succeeded (Time spent: 2.168/3.379 ms)

nebula> REBUILD TAG INDEX single_person_index OFFLINE;
Execution succeeded (Time spent: 2.352/3.568 ms)

nebula> SHOW TAG INDEX STATUS;
==========================================
| Name                | Tag Index Status |
==========================================
| single_person_index | SUCCEEDED        |
------------------------------------------

使用索引Graph

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

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


最后更新: 2020年7月21日