我正在尝试在属性上创建索引后使用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 ×1