Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么neo4j EXPLAIN显示数千行具有唯一的过滤器不同节点?_Neo4j - Fatal编程技术网

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

为什么neo4j EXPLAIN显示数千行具有唯一的过滤器不同节点?,neo4j,Neo4j,这种情况并非总是发生,但在使用完全相同的数据库(可能还有不同的节点搜索)时,我的EXPLAIN会不断显示数千行,而我只需要一行即可。我错过什么了吗 例如: 有11000条记录带有该标签,显示了正确的开始。 但随后过滤器缩小到1105,这毫无意义。 而DISTINCT缩小到1105,这也没有意义 当我运行查询时,我只得到一个唯一的节点。当我运行explain时,结果显示1105行。为什么要谨慎?我注意到,当这种情况发生时,下游的一切都停滞了,所以我认为Query做的工作比它需要做的要多,但我不确

这种情况并非总是发生,但在使用完全相同的数据库(可能还有不同的节点搜索)时,我的EXPLAIN会不断显示数千行,而我只需要一行即可。我错过什么了吗

例如:

有11000条记录带有该标签,显示了正确的开始。 但随后过滤器缩小到1105,这毫无意义。 而DISTINCT缩小到1105,这也没有意义

当我运行查询时,我只得到一个唯一的节点。当我运行explain时,结果显示1105行。为什么要谨慎?我注意到,当这种情况发生时,下游的一切都停滞了,所以我认为Query做的工作比它需要做的要多,但我不确定为什么。如果有人能给我指点一个能更好地解释这一点的资源,我将不胜感激


蒂娅

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

估计的行正是这样,通过考虑通过统计数据和计数存储中的数据从图中知道的内容来进行估计

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

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


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

谢谢,这就解释了这一点。我不明白解释是一种估计(与简介相反)。你说得对-profile只返回1行。EXPLAIN很难估计apoc程序吗?我使用apoc.refactor.mergeNodes来合并两个唯一的节点,从这两个唯一的节点中我得到10000个估计行,而不是1个。(查询崩溃,因此我无法对其进行分析)。计划者将无法从过程调用中获取任何相关数据,因此不要依赖过程调用操作符的db命中或估计行来获得准确或有用的结果。这里的一个重要收获是,您不必太担心估计行。规划者经常根据其所知道的情况进行大致的估计,但估计的行实际上只用于确定如何规划查询,而对于查询调优没有那么大的用处。相比之下,配置文件中的实际行非常有用。如果您在查询时遇到问题,请创建另一个问题或在我们的社区论坛上提问。
EXPLAIN MATCH (node:Label) 
WHERE node.UniqueID=1 
WITH DISTINCT node  
RETURN node