繁体   English   中英

使用DESC与ASC时Neo4j Cypher的执行时间太慢

[英]Neo4j Cypher execution time when using DESC vs ASC too slow

在当前的nodejs应用程序中,我使用Neo4j作为数据库并使用其REST API。 通过运行单元测试,我发现我有两个运行速度非常慢的测试,并将其跟踪到密码查询是造成不良性能本身的元凶。 现在,尽管性能仍然很慢,但至少第一种情况在我的本地开发机上的用例运行的时间大约是300毫秒。 但是,第二个查询会加上一整秒,直到我得到结果(在我的情况下只有两行)。 唯一的区别是,我使用的是DESC而不是品牌名称的ASC排序。

查询1

MATCH (Distributor {slug: "some-dist"})-[:SELLS]->(product:Product)-[:IS|:BELONGS_TO*0..5]->(Category {slug: "electrical"}),
(product)-[:HAS_BRAND]->(brand:Brand)
RETURN DISTINCT brand ORDER BY brand.name ASC

查询2

MATCH (Distributor {slug: "some-dist"})-[:SELLS]->(product:Product)-[:IS|:BELONGS_TO*0..5]->(Category {slug: "electrical"}),
(product)-[:HAS_BRAND]->(brand:Brand)
RETURN DISTINCT brand ORDER BY brand.name DESC

有关图的一些数据:

  • 4个分发服务器节点
  • 约600个品牌节点
  • 约1500个类别节点
  • 〜30000个产品节点

所有段塞属性都有唯一的约束。 品牌名称的名称属性也已建立索引。

为什么会这样,第二个查询却慢得多,我该如何解决?

我弄错了,没有在第一个节点上使用冒号来指定其标签。 我实际上创建了一个内部规则,即每个节点都应该有一个标签。

按标签匹配是快速的,并且结果的排序实际上是没有影响的,无论是升序还是降序。 它仍然不能解释所注意到的行为,但是要提醒您在密码查询中使用标签。

MATCH (:Distributor {slug: "some-dist"})-[:SELLS]->(product:Product)-[:IS|:BELONGS_TO*0..5]->(Category {slug: "electrical"}),
(product)-[:HAS_BRAND]->(brand:Brand)
RETURN DISTINCT brand ORDER BY brand.name DESC

为我做the俩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM