小编Dan*_*ano的帖子

OR运算符的性能不佳

我正在尝试在属性上创建索引后使用OR运算符对582479个基因运行查询:symbol,primaryidentifier,secondaryidentifier和name.这个查询:

PROFILE 
MATCH(g:Gene) WHERE g.symbol="CG11566" OR 
                    g.primaryidentifier="CG11566" OR
                    g.secondaryidentifier="CG11566" OR 
                    g.name="CG11566" 
RETURN g.id, g.primaryidentifier, g.secondaryidentifier, g.symbol, g.name
ORDER BY g.id;
Run Code Online (Sandbox Code Playgroud)

性能非常差,创建的索引不使用但只有标签扫描 - > 2912399总db命中率在3253 ms

更改了查询以使用UNION:

PROFILE 
      MATCH(g:Gene) WHERE g.symbol='CG11566' return g.id 
UNION MATCH(g:Gene) WHERE g.primaryidentifier='CG11566' return g.id 
UNION MATCH(g:Gene) WHERE g.secondaryidentifier='CG11566' return g.id 
UNION MATCH(g:Gene) WHERE g.name='CG11566' return g.id;
Run Code Online (Sandbox Code Playgroud)

已经使用了索引 - 在73毫秒内总共有8个db命中率.好多了.没有使用UNION的任何更好的方法来实现查询?

neo4j

6
推荐指数
1
解决办法
160
查看次数

标签 统计

neo4j ×1