У меня относительно небольшой график (2,5 млн узлов, 5 млн отн., 7,7 млн свойств), и я выполняю (как мне кажется) простой запрос, но на быстром ноутбуке с 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;
ORDER BY
, просто чтобы посмотреть, сильно ли это повлияет на производительность? Кроме того, сколько строк будет возвращено, если вы удалитеsum()
, так что ваше предложение возврата будет простоreturn s.tag as store, l.item_quantity
? 10.06.2013WITH s.tag as store, sum(l.item_quantity) as quantity RETURN store, quantity order by store
10.06.2013WITH
везде, где это возможно, я думаю, что в этом случае это могло бы вам помочь. Я думаю, что происходит, так это то, что neo4j упорядочивает результаты перед агрегированием (что означает, что он упорядочивает 107 тыс. строк). Если вы используетеWITH
, а затем упорядочиваете что-то вWITH
, как предложил Майкл, он должен сначала выполнить агрегацию перед порядком. 10.06.2013