在属性,符号,primaryidentifier,secondaryidentifier和name上创建索引之后,我试图使用OR运算符对582479个基因进行查询。
这个查询:

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;

性能非常差,不使用创建的索引,而仅在3253毫秒内使用标签scan-> 2912399总数据库命中数

将查询更改为使用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;

使用了索引-> 73毫秒内总共有8次数据库命中。好多了。
在不使用UNION的情况下实现查询的更好方法?

最佳答案

您现在无能为力,Cypher的策划师必须变得更加聪明

目前,UNION是最好的解决方案。

09-27 12:56