簡體   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