使用精细的关系名称避免冗余节点标签检查 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用精细的关系名称避免冗余节点标签检查

在优化性能时,使用节点模式专有的关系标签可以避免对节点进行标签筛选。考虑一个图表模型,其中关系 likes 仅用于定义两个 person 节点之间的关系。我们可以编写以下查询来找到这种模式:

MATCH (n:person)-[:likes]->(m:person) RETURN n, m

对 n 和 m 的 person 标签检查属于冗余检查,因为我们将关系定义为仅当两者都属于类型 person 时才会出现。为了优化性能,我们可以按如下方式编写查询:

MATCH (n)-[:likes]->(m) RETURN n, m

当属性仅限于单个节点标签时,也可以应用此模式。假设只有 person 节点具有属性 email,因此验证节点标签是否匹配 person 则属于冗余检查。将此查询编写为:

MATCH (n:person) WHERE n.email = 'xxx@gmail.com' RETURN n

比将此查询编写为以下形式效率低:

MATCH (n) WHERE n.email = 'xxx@gmail.com' RETURN n

仅当性能很重要并且在建模过程中要进行检查以确保这些边缘标签不会被重复用于涉及其他节点标签的模式时,才应采用这种模式。如果您稍后在另一个节点标签上引入一个 email 属性(例如 company),则这两个版本的查询结果将有所不同。