1

私は比較的小さなグラフ (2.5M ノード、5M rel、7.7M プロパティ) を持っており、単純なクエリを実行しています (私には思えます) が、高速な SSD ベースのラップトップで実行するのに 63 秒かかります。これは本当に Neo4j に期待するべきパフォーマンスですか、それともクエリに何か問題がありますか?

start ph=node(2)
match ph-[:NEXT_LEVEL]->c
where c.tag = "class 1"
with c
match c-[:NEXT_LEVEL]->p<-[:SOLD]-l<-[:LINE]-h-[:SOLD_IN]->s
return s.tag as store, sum(l.item_quantity) as quantity order by s.tag;

コンソール出力

更新:更新されたクエリを投稿したかっただけです:

start ph=node(2)
match ph-[:NEXT_LEVEL]->c-[:NEXT_LEVEL]->p<-[:SOLD]-l<-[:LINE]-h-[:SOLD_IN]->s
where c.tag = "class 1"
with s.tag as store, sum(l.item_quantity) as quantity
return store, quantity order by store;

クエリが更新されたコンソール

4

1 に答える 1

0

特定のユースケースがない限り、通常はWITH句を削除してパフォーマンスを向上させてください。

start ph=node(2)
match ph-[:NEXT_LEVEL]->c-[:NEXT_LEVEL]->p<-[:SOLD]-l<-[:LINE]-h-[:SOLD_IN]->s
where c.tag = "class 1"
return s.tag as store, sum(l.item_quantity) as quantity order by s.tag;

編集:コメントで説明されているように、集約前ではなく集約後に発生させることで、さらに優れたパフォーマンスを得ることができますORDER BY。を使用してこれを行うことができますWITH(つまり、今話していた特定のユースケースがあります)。ここでの違いは、WITH句を可能な限り最後に移動して、以前のすべての処理を分離するのではなくグループ化できるようにしたことです。

start ph=node(2)
match ph-[:NEXT_LEVEL]->c-[:NEXT_LEVEL]->p<-[:SOLD]-l<-[:LINE]-h-[:SOLD_IN]->s
where c.tag = "class 1"
with s.tag as store, sum(l.item_quantity) as quantity
return store, quantity order by store;
于 2013-06-10T15:14:53.360 に答える