【问题标题】:Neo4j slow cypher queryNeo4j 慢速密码查询
【发布时间】:2013-08-08 11:19:37
【问题描述】:

我的密码查询有问题:

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

这个查询实际上需要 600ms,只有 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

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    试试这个,这样模式匹配器就可以将你的 ff1 比较拉到模式匹配中。

    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 ...) 您的查询返回什么?

    • 这是第一次运行还是后续运行?
    • 如果您在生产环境中运行,请确保使用参数

    【讨论】:

      【解决方案2】:

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

      CREATE INDEX ON :Venue(name)
      

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

      CREATE CONSTRAINT ON (c:Country) ASSERT c.name IS UNIQUE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-09
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多