【发布时间】:2015-06-05 13:33:08
【问题描述】:
目前我正在 Neo4j 2.2.2 上尝试此查询
在撰写本文时,我们尚未标记任何节点,因为我们最近从 Neo4j 1.x 升级。所以我们没有使用 USING 子句的选项。
我正在尝试使用索引,但以全表扫描结束。
START pfComp=node:Company('id:2403226') , ptComp=node:Company('id:1946633')
OPTIONAL MATCH
(pfComp)<-[c:CHILD_OF*]-(cfComp)
WITH collect(id(cfComp)) as cfCompIds, ptComp, pfComp
OPTIONAL MATCH
(ptComp)<-[c2:CHILD_OF*]-(ctComp)
WITH cfCompIds, collect(id(ctComp)) AS ctCompIds
MATCH
(fComp) -[fR:PARTICIPATES_IN]-> cdeals <-[tR:PARTICIPATES_IN]-(tComp)
WHERE
(fComp.id = 2403226 or id(fComp) in cfCompIds) and
(tComp.id = 1946633 or id(tComp) in ctCompIds)
RETURN fComp, tComp, cdeals
Cypher 版本:CYPHER 2.2,规划器:COST。 1305292 总 db hits in 79128 ms。
对此的任何帮助将不胜感激。
以下是完整的配置文件命令输出。
查询的开头部分执行得很快:
profile START pfComp=node:Company('id:2403226') , ptComp=node:Company('id:1946633')
OPTIONAL MATCH
(pfComp)<-[c:CHILD_OF*]-(cfComp)
WITH collect(id(cfComp)) as cfCompIds, ptComp, pfComp
OPTIONAL MATCH
(ptComp)<-[c2:CHILD_OF*]-(ctComp)
return cfCompIds, collect(id(ctComp)) AS ctCompIds
Cypher 版本:CYPHER 2.2,规划器:COST。在 582 毫秒内总共有 836 次 db 命中。
【问题讨论】:
-
也许你这里有错字?你使用了你之前没有初始化过的标识符,所以它必须做一个非常糟糕的完整扫描并展开:
OPTIONAL MATCH (ptComp)<-[c2:CHILD_OF*]-(ctComp) -
这些在这里定义它们的查找的方式不一致,对于属性查找,您错过了标签,并且 id() 查找与 prop 查找冲突,我将其拆分为联合的两个部分
-
Michael Hunger:查询的请求部分很好:profile START pfComp=node:Company('id:2403226') , ptComp=node:Company('id:1946633') OPTIONAL MATCH ( pfComp)
标签: neo4j