math语句where条件后面每个查询字段都创建了索引,使用and连接,执行报无效索引

提问参考模版:

  • nebula 版本:(为节省回复者核对版本信息的时间,首次发帖的版本信息记得以截图形式展示)
  • 部署方式(分布式 / 单机 / Docker / DBaaS):
  • 是否为线上版本:Y / N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息

您好, 建立索引之后 需要rebuild一下,可以rebuild一下再试试

肯定rebuild了 ,我把where后边的三个字段分开查询 就可以正确执行三次,放在一起用and连接就报错

不是rebuild导致的

还不支持多个索引的复合查询,这里需要创建一个包含三个字段的index.

1 个赞

某些查询只用到三个字段中的一个,所以三个字段都要分别创建索引,如果三个字段都用到,还需要创建对应的复合索引?

是的,索引是根据左匹配规则进行选取的,举个例子:
tag (c1, c2, c3)
index (c1, c2, c3) 可以支持过滤条件 c1 and c2 and c3 ; c1 and c2; c1 ; 但是不能支持 c2 and c3; c3;

那么如果需要支持任何字段的过滤条件,不妨尝试以下的index创建方式:
index1 (c1, c2, c3)
index2 (c2, c3, c1)
index3 (c3, c1, c2)

会根据如下策略进行最优所有的选择:
where c1 == 1 → index1
where c2 == 1 → index2
where c3 == 1 → index3
where c1 == 1 and c2 ==1 → index1
where c1 == 1 and c3 == 1 → index3
where c2 == 1 and c3 == 1 → index2
where c1 == 1 and c2 == 1 and c3 == 1 → index1 or index2 or index3

2 个赞

我把原有的三个字段索引删除了,创建了一个复合索引 就是where后边的两个字段,可以正常查询。
match (v:fund{fund_type:“股票型”}) where v.recent_1year_yield_rate > 0.1 and v.max_retracement_1year<0.2 return v,v.recent_1year_yield_rate,v.fund_name,v.max_retracement_1year

是不是因为没有创建无属性索引?

已经在属性上创建索引了,无法再创建无属性索引。
我用测试数据试了下,还是同样的错误。
应该不是无属性索引导致的

和无属性索引没关系

不要任意在生产环境中使用索引,除非很清楚使用索引对业务的影响。索引会导致写性能下降90%甚至更多。索引并不用于查询加速。只用于:根据属性定位到点或边,或者统计点边数量。

不加索引 无法查询啊

没有创建复合索引应该退化到字段索引。

该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。