首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j效率问题: Cypher查询永远运行

Neo4j效率问题: Cypher查询永远运行
EN

Stack Overflow用户
提问于 2018-03-06 15:26:56
回答 1查看 57关注 0票数 0

我有一个大小为~ 70GbNeo4j数据库。它具有相同结构的8数据集,只是节点不同。下面给出的一个简单的Cypher查询从一个数据集中检索一些数据,需要花费很长时间才能运行。数据集中没有那么多节点,只有几千个。下面是查询:

代码语言:javascript
复制
MATCH (c:Cell)-[ex:EXPRESSES]->(g:Gene)
WHERE c.DATASET = "cd1_e165" AND g.geneName = "1010001B22Rik" 
RETURN c.tsneX, c.tsneY, ex.expr, c.cellId

总共有大量的:EXPRESSES关系,但如果我们仅限于c.DATASET,我相信它应该运行得更快。也许这个问题与我在每个:Cell中都有c.DATASET属性,而不是将其作为一种索引有关。可以做些什么来加快查询速度?

EN

回答 1

Stack Overflow用户

发布于 2018-03-06 17:11:15

首先,您应该在这两个属性上使用索引。

代码语言:javascript
复制
 CREATE INDEX ON :Cell(DATASET);
 CREATE INDEX ON :Gene(geneName);  

接下来,我会像这样重写查询(不确定这是否有帮助,但这对我来说更有意义,cypher的行为通常就像你期望的那样,在这种情况下,它应该使用索引,而不是开始搜索所有可能的路径):

代码语言:javascript
复制
MATCH (c:Cell{DATASET:'cd1_e165'})-[ex:EXPRESSES]->(g:Gene{geneName:'1010001B22Rik'})
RETURN c.tsneX, c.tsneY, ex.expr, c.cellId

正如InverseFalcon提到的:PROFILEEXPLAIN总是可以帮助你理解你的查询做了什么,以及它是否符合你的期望。看看at the docs吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49125461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档