gpt4 book ai didi

Neo4j 不使用索引

转载 作者:行者123 更新时间:2023-12-05 01:19:58 25 4
gpt4 key购买 nike

目前我正在 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 2.2,计划者:COST。在 79128 毫秒内总计 1305292 次数据库命中。

如有任何帮助,我们将不胜感激。

下面是完整的配置文件命令输出。

This is the explain plan for the query

查询的开始部分执行得很快:

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 2.2,计划者:COST。 582 毫秒内总计 836 次数据库命中。

enter image description here

最佳答案

您的第二部分看起来像是关系连接或附加查找(如 n+1 选择)。也许改用图形模型?查询也变得更简单。

所以你会计算 fComptComp 与初始匹配,由于 *0.. 它包括 pfComp 和 ptComp 每个。

然后你有最后一场比赛的 fComp 和 tComp 之间的交叉。

请尝试一下,看看效果如何:

MATCH (pfComp:lCompany)<-[c:CHILD_OF*0..]-(fComp:lCompany)
WHERE pfComp.id = 2403226
// reduce cardinality for following match
WITH collect(distinct fComp) as companies1
MATCH (ptComp:lCompany)<-[c2:CHILD_OF*]-(tComp:lCompany)
WHERE ptComp.id = 1946633
// create cross product between fComp and tComp
UNWIND companies1 as fComp
MATCH (fComp) -[fR:PARTICIPATES_IN]->(cdeals)<-[tR:PARTICIPATES_IN]-(tComp)
RETURN fComp, tComp, cdeals;

关于Neo4j 不使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667878/

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