我的密码查询存在问题:
start mag=node(1387),f=node(53)
MATCH mag-[:MAGASINS]->t-[:CONTAINS_SF]->sf1-[:IN_FAMILLY]->f
WITH distinct t,f
MATCH t-[:CONTAINS_SF]->sf2-[:IN_FAMILLY]->f1
WITH f,f1,sf2,t
WHERE f<>f1
return sf2,count(distinct t) as count
order by count desc
limit 15
这个查询实际上需要600毫秒,只有70k个节点,目标节点数是10M
my jvm args : -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Xmx5020m
my dev laptop : core i7, ssd, 16go
你可以帮我缩短执行时间吗?
谢谢 :)
关心查尔斯。
我的neo4j版本:1.9.1 os:mac os 10.8 jdk orcacle 1.7
答案 0 :(得分:0)
试试这个,所以模式匹配器可以将你的f&lt;&gt; f1比较拉入模式匹配。
start mag=node(1387),f=node(53)
MATCH mag-[:MAGASINS]->t-[:CONTAINS_SF]->sf1-[:IN_FAMILLY]->f
WITH distinct t,f
MATCH t-[:CONTAINS_SF]->sf2-[:IN_FAMILLY]->f1
WHERE f<>f1
return sf2,count(distinct t) as count
order by count desc
limit 15
您的查询返回的分析(profile start ...
)是什么?
答案 1 :(得分:0)
你有没有试过索引某些属性?索引有助于优化查找特定节点的过程。执行此操作的命令是:
CREATE INDEX ON :Venue(name)
为确保所有国家/地区名称都是唯一的,我们可以添加唯一性约束:
CREATE CONSTRAINT ON (c:Country) ASSERT c.name IS UNIQUE