[英]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
有關圖的一些數據:
所有段塞屬性都有唯一的約束。 品牌名稱的名稱屬性也已建立索引。
為什么會這樣,第二個查詢卻慢得多,我該如何解決?
我弄錯了,沒有在第一個節點上使用冒號來指定其標簽。 我實際上創建了一個內部規則,即每個節點都應該有一個標簽。
按標簽匹配是快速的,並且結果的排序實際上是沒有影響的,無論是升序還是降序。 它仍然不能解釋所注意到的行為,但是要提醒您在密碼查詢中使用標簽。
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.