- 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没起索引
对于上面的例子,如果要根据属性匹配多个值,只能用in吗? 但是用in的效率很低,有什么更好的办法吗
有试过用or吗? where Movie_tag_1.name == xxx or Movie_tag_1.name == xxx
不好意思,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 来生成对应的图片,你们可以做的更漂亮些。
1 个赞
ok,这个我们评估下,应该节后回来会加上