微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 neo4j EXPLAIN 显示数千行带有唯一的过滤器 DISTINCT 节点?

如何解决为什么 neo4j EXPLAIN 显示数千行带有唯一的过滤器 DISTINCT 节点?

这不会一直发生,但使用完全相同的数据库(可能还有不同的节点搜索),我的 EXPLAIN 不断显示数千行,而我只希望有一行。我错过了什么吗?

例如:

EXPLAIN MATCH (node:Label) 
WHERE node.UniqueID=1 
WITH disTINCT node  
RETURN node

Explain Flow

有 11000 条带有该标签的记录,这表明开始是正确的。 但随后过滤器缩小到 1,105,这毫无意义。 并且 disTINCT 缩小到 1,105,这也没有任何意义。

当我运行查询时,我只得到一个唯一的节点。当我运行解释时,结果显示 1105 行。为什么会出现差异?我注意到当这种情况发生时,下游的一切都会停止,所以我认为 Query 做的工作比它需要的要多,但我不知道为什么。如果您能提供更好地解释这一点的资源,我将不胜感激。

TIA!!

解决方法

这些是在查询执行之前计算的估计行,它不代表执行中的实际行(您可以使用 PROFILE 来查看)。

估计的行正是通过统计数据和计数存储中的数据考虑从图中已知的内容来估计的。

因为这些是在执行之前计算的,所以规划器不知道用于查找的属性的特殊性。

如果你真的有一个唯一的 ID,那么你应该在它上面创建一个唯一的约束,这样规划者将能够理解它并产生更有用的估计。它还可以利用索引(带有唯一约束)来提高查找速度。

同样进行这样的更改,您将不再需要使用 DISTINCT,因为唯一索引查找可以保证它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。