我是一个图形DB的相对n00b,一直在玩Neo4j (通过Ruby ActiveRecord,但我不认为这是相关的),非常喜欢它,但也发现了一些违反直觉的行为。
我的问题涉及从DB获取一些数据,将其拉回到我的Ruby代码中,执行一些处理,然后使用该外部处理所标识的in集进行第二次查询(这对于在DB中完成来说太复杂了)。结果是ActiveRecord查询,如下所示
Foo.where(foo_id: foo_ids)...
这将转换为Cypher查询,如下所示
MATCH (foo:Foo) WHERE foo.foo_id IN [1, 5, ...] ...
I集比较大,有几万个,我发现这个查询相当慢。foo_id
有一个独特的约束,我在RDBMS中的经验告诉我,它不应该是唯一的。这只是一种事情的方式,还是我对正确的“图形”方式一无所知?
发布于 2020-02-20 13:22:20
您需要在foo_id上创建索引。之后,您可以展开该数组并进行匹配,而不是签入数组,如下所示
UNWIND [1,4,5,.....] as id
MATCH (foo : Foo{foo_id:id})
RETURN foo
https://stackoverflow.com/questions/60318630
复制相似问题