

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用精细的关系名称避免冗余节点标签检查
<a name="best-practices-content-5"></a>

 在优化性能时，使用节点模式专有的关系标签可以避免对节点进行标签筛选。考虑一个图表模型，其中关系 `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`），则这两个版本的查询结果将有所不同。