本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用精细的关系名称避免冗余的节点标签检查
在优化性能时,使用节点模式专有的关系标签可以删除节点上的标签筛选。考虑一个图表模型,其中关系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
,则这两个版本的查询结果将有所不同。