0

我的密码查询有问题:

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 操作系统:mac os 10.8 jdk orcacle 1.7

4

2 回答 2

0

试试这个,这样模式匹配器就可以将你的 f<>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

profiling( profile start ...) 你的查询返回什么?

  • 这是第一次运行还是后续运行?
  • 如果您在生产中运行它,请确保使用参数
于 2013-08-08T13:02:13.457 回答
0

你有没有试过索引一些属性?索引有助于优化查找特定节点的过程。执行此操作的命令是:

CREATE INDEX ON :Venue(name)

为确保所有国家/地区名称都是唯一的,我们可以添加唯一性约束:

CREATE CONSTRAINT ON (c:Country) ASSERT c.name IS UNIQUE
于 2016-03-22T22:43:52.100 回答