反向写查询语句,报错No valid index found,但正向写却没有报错

  • nebula 版本:3.6.0
  • 部署方式:分布式
  • 安装方式: RPM
  • 是否上生产环境:Y

将定位节点作为终点:

match p=()-[r:CONTROLLER]->(n:COMPANY{COMPANY_ID:'xxx'}) where r.RELATION_TYPE=='xxx' return p

报错如下:

将定位节点作为起点:

match p=(n:COMPANY{COMPANY_ID:'xxx'})<-[r:CONTROLLER]-() where r.RELATION_TYPE=='xxx' return p

查询正常:

背景:
COMPANY_ID已建索引
RELATION_TYPE没有建索引

问题:
为什么语句的正确性与否跟方向有关?这个是有相关的书写要求还是BUG呀?

可以认为这是优化规则实现的小 bug 或者不够完善的地方。

两个表达分别把边的条件和点的条件作为了最开始的起始条件,因为我们没有基于 cost 的优化,所以这两个谁作为优先考虑的条件并不能知道哪一个最优,也没有去考虑索引存在的因素去做选择。

当起始条件为点的时候,点上存在索引,就可以查询了,反之刚好就不行了。

您可以 profile 一下两种表达看到两个不同规划的起点查询的差别。

我们下一个大版本可能会有 hint 的语法支持做到查询按照希望的方式被规划

1 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。