首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么向查询中添加另一个标签会使查询慢下来?

为什么向查询中添加另一个标签会使查询慢下来?
EN

Stack Overflow用户
提问于 2015-10-27 23:45:13
回答 1查看 31关注 0票数 1

很抱歉措辞含糊,这是问题所在。由于昨天得到了一些帮助,我有一个正在快速运行的查询(4秒):

代码语言:javascript
复制
// polypeptide domain, protein HMM match and polypeptide (fast)
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)
WHERE (phm)-[:PART_OF]->(pd)
MATCH (p:Polypeptide)
WHERE (phm)-[:PART_OF]->(p)
RETURN phm,pd,p

这是因为我选择了5个多肽结构域,然后很快就找到了相关的蛋白HMM匹配和多肽。

所以,我只想添加与多肽相关的mRNA --这是一对一的关系,每个mRNA连接一个和唯一一个多肽,所以我认为额外的匹配会很快。以下是我写的:

代码语言:javascript
复制
// polypeptide domain, protein hmm match, polypeptide and mRNA (blows up)
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)
WHERE (phm)-[:PART_OF]->(pd)
MATCH (p:Polypeptide)
WHERE (phm)-[:PART_OF]->(p)
MATCH (m:mRNA)
WHERE (p)-[:TRANSLATION_OF]->(m)
RETURN phm,pd,p,m

此查询永远不会返回。我又一次完全迷茫了。对于我的一生,我无法弄清楚如何使这个简单的添加到查询工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-28 01:41:36

我认为它正在失去控制,因为对于每一个MATCH结果,它都试图找到每一个其他MATCH结果的每个组合。

此外,在WHERE子句中通常不应该使用模式匹配,除非您正在进入更复杂的逻辑(如NOT(<match syntax))。这个怎么样?

代码语言:javascript
复制
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)-[:PART_OF]->(pd)
WITH pd, phm
MATCH (phm)-[:PART_OF]->(p:Polypeptide)
WITH pd, phm, p
MATCH (p)-[:TRANSLATION_OF]->(m:mRNA)
RETURN phm,pd,p,m

如果其中任何一个涉及多个关系,则可以在WITH中执行WITH中的WITH pd, collect(phm)等操作。

然而,看你的比赛,你似乎可以逃脱这一切:

代码语言:javascript
复制
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (pd)<-[:PART_OF]-(phm:ProteinHmmMatch)-[:PART_OF]->(p:Polypeptide)-[:TRANSLATION_OF]->(m:mRNA)
RETURN phm,pd,p,m

同样,如果两者之间有许多关系,那么您的数据将是某种程度上的非规范化。

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

https://stackoverflow.com/questions/33380489

复制
相关文章

相似问题

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