match查询中“where条件含有or语句”时,不能使用索引查询

  • nebula版本 V2.5.1

有如下查询语句:

  • MATCH (src:PROPERTY)-[relation:SYNONYM]->(end:PROPERTY) WHERE start.tagId==“1234567” or end.tagId==“1234567” return start, end.tagId

该语句执行较慢(一条查询,需要0.6s),不能利用index加快查询速度,请问是否有方法针对如上场景利用索引(除了union方法外),加快查询速度?

相关说明:

  • PROPERTY的tagId有建立索引
  • 将上述语句拆分为如下语句,使用union集合运算,利用索引进行查询,时间为 0.0041s
    • MATCH (src:PROPERTY)-[relation:SYNONYM]->(end:PROPERTY) WHERE start.tagId==“1234567” return start, end.tagId union MATCH (src:PROPERTY)-[relation:SYNONYM]->(end:PROPERTY) WHERE end.tagId==“1234567” return start, end.tagId
1 个赞


提问时请选对对应的分类,参考上面,我把需求改成使用问题了。顺便建议阅读下本站的使用指南 论坛使用指北(最后更新于 2023.04.06)

OK, THK

问题研发同学会回复你的,:thinking: 这题我不会你稍等一会

这个是预期的,本来就不应该命中索引的。拆分成 union 之后选中索引肯定是快的。

是的,使用union是折中方案,nebula针对下面这种场景是否有支持?

这个好像没啥优化空间

如果
a. match (src:prop)-(r:synon)->(end:prop) where src.p1 == "foo" or end.p1=="bar"

b. match (src:prop)-(r:synon)->(end:prop) where src.p1 UNION "foo" match (src:prop)-(r:synon)->(end:prop) where end.p1=="bar"

a,b 等价的话(我理解是的?),我们有可能在 RBO 的情况下引入 rule 让 a. 有 b. 一样的计划么?或者说,我们可以假设 b 现在默认的执行计划 在 prop.p1 索引存在的情况下,一定优于 a 么? 如果是的话,这个情况还具有通用性的话(具有么?)是不是可以引入呢?