gpt4 book ai didi

neo4j - 为什么这个 Cypher 查询更快?

转载 作者:行者123 更新时间:2023-12-01 11:20:07 26 4
gpt4 key购买 nike

我刚刚读过this page Neo4j 的官方文档。
它展示了一种专门检索 friend 的 friend 的 Cypher 方法:

MATCH (joe { name: 'Joe' })-[:knows*2..2]-(friend_of_friend)
WHERE NOT (joe)-[:knows]-(friend_of_friend)
RETURN friend_of_friend.name, COUNT(*)
ORDER BY COUNT(*) DESC , friend_of_friend.name

为什么下面的方法更快? :

MATCH path = shortestPath((joe { name: 'Joe' })-[:KNOWS*..2]-(friend_of_friend))
WHERE length(path) = 2
WITH nodes(path)[-1] AS secondDegreeFriends //retrieving the friend_of_friend nodes
RETURN secondDegreeFriends._name, COUNT(*)
ORDER BY COUNT(*) DESC , secondDegreeFriends.name

(第二个查询的时间为 33 毫秒 vs 22 毫秒,均在图表中 182 个成员的上下文中)

最佳答案

首先,如果没有一些测试数据,就很难向您证明查询差异的某些方面。

我在这里看到一些要点:

  1. 在第一个查询中,您不使用标签和索引属性,因此整个模式匹配将产生一个遍历匹配器,这是一个全局图形查找。

  2. 否定总是代价高昂,而对 WHERE 子句中的模式进行否定代价高昂。

我建议您在 shell 中使用 PROFILE 运行查询并检查执行计划结果。

  • 未指定关系方向的模式上的最短路径具有更好的路径匹配算法。
  • 关于neo4j - 为什么这个 Cypher 查询更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28452936/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com