match执行效率比较

  • nebula 版本:v2 rc1
  • 部署方式(分布式 / 单机 / Docker / DBaaS):单机
  • 硬件信息
    • 磁盘( 必须为 SSD ,不支持 HDD)ssd
    • CPU、内存信息:128g内存 12核
  • 问题的具体描述
    1、数据量大致情况:点30w+,边100w+
    2、执行语句1:
    MATCH (Movie_tag_1:Movie) -[ACTOR:ACTOR]->(Person_tag_2:Person) WHERE Movie_tag_1.name ==‘新警察故事’ RETURN Person_tag_2 ,Movie_tag_1 ,ACTOR

    3、执行语句2:
    MATCH (Movie_tag_1:Movie) -[ACTOR:ACTOR]->(Person_tag_2:Person) WHERE Movie_tag_1.name in [‘新警察故事’] RETURN Person_tag_2 ,Movie_tag_1 ,ACTOR

    4、为什么2种情况执行效果差别很大

explain看看呢

应该是==使用了属性索引,in没有使用属性索引
后者查询到的数据量比较大

是的 in没起索引

@0xqq 你好,问题解决了吗?

对于上面的例子,如果要根据属性匹配多个值,只能用in吗? 但是用in的效率很低,有什么更好的办法吗

有试过用or吗? where Movie_tag_1.name == xxx or Movie_tag_1.name == xxx

用过,也很慢

可以在语句前面加个profile看下生成的执行计划里哪个步骤比较耗时, 然后贴下图。 EXPLAIN and PROFILE - Nebula Graph Database Manual

不好意思,web界面没有显示耗时的信息,是在log里面吗? 会生成在哪个log文件夹下?

你好,针对你反馈的情况,我们正在着手解决类似如下的语句的性能问题:

MATCH (v:player)-[:serve]-(v2:team)
WHERE v.name IN ["Tim Duncan", "Tony Parker"]
RETURN v2

这里的索引选择目前是走的全 TAG 扫描,然后再过滤,不是带条件的 IndexScan,这里的执行计划不是最优。

@steam 记个 bug 吧,类似的 MATCH 性能问题论坛里有提过几次了。 也请 @jude-zhu 把这个的任务的优先级提到最高。谢谢!

2 个赞

用console可以看,web可能还不支持

@jerry.liang 的 studio 提个需求:如果用户使用 explain 或者 profile 执行一句 nGQL 时,nebula 会返回对应的 execution plan,你们可以在 studio 中用图形的方式将这个 plan 画出来,目前 console 是通过 graphviz 来生成对应的图片,你们可以做的更漂亮些。

cc @jude-zhu @steam

1 个赞

ok,这个我们评估下,应该节后回来会加上:handshake: