Neo4j缓慢的密码查询

时间:2013-08-08 11:19:38

标签: neo4j cypher

我的密码查询存在问题:

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

2 个答案:

答案 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