跳转至

索引介绍

为了提高查询性能,NebulaGraph支持为点的 Tag 或 Tag 的某个属性,边的 Edge type 或 Edge type 的某个属性创建索引。索引可以基于指定的 Tag、Edge type、属性查询数据,但是索引本身不存储数据,而是存储数据的位置。

NebulaGraph支持两种类型索引:原生索引和全文索引。

使用说明

  • 索引可以提高查询性能,但是会降低写入性能。
  • 索引是执行LOOKUP语句时用于定位到数据的前置条件,如果没有索引,执行LOOKUP语句会报错。
  • 使用索引时,NebulaGraph会自动选择最优的索引。
  • 具有高选择度的索引,即索引列中不同值的记录数与总记录数的比值较高(例如身份证号的比值为 1)可显著提升查询性能;而对于低选择度的索引(例如国家),查询性能可能不会带来显著提升。

原生索引

原生索引可以基于指定的属性查询数据,有如下特点:

  • 包括 Tag 索引和 Edge type 索引。
  • 必须手动重建索引(REBUILD INDEX)。
  • 支持创建同一个 Tag 或 Edge type 的多个属性的索引(复合索引),但是不能跨 Tag 或 Edge type。

原生索引操作

全文索引

全文索引是基于 Elasticsearch 来实现的,用于对字符串属性进行前缀搜索、通配符搜索、正则表达式搜索和模糊搜索,有如下特点:

  • 只允许创建一个属性的索引。
  • 不支持逻辑操作,例如ANDORNOT

Note

如果需要进行整个字符串的匹配,请使用原生索引。

没有 NULL 值索引

不支持对值为 NULL 的属性创建索引。

没有唯一索引

在 Cypher 中,可以通过 Constrains 实现属性值的唯一性限制。在 MySQL 中,可以建立唯一索引来限制某字段只有唯一值。在 nGQL 中没有属性的唯一索引(用户自行保证属性值的唯一性)。

数字、日期和时间类型的范围查询

原生索引还支持对数字、日期和时间类型的属性进行范围查询,不支持其他属性类型的范围查询。


最后更新: January 31, 2024