2015-10-14 3 views
0

У меня есть следующий запрос (с именами фиктивных отношений и ярлыков), , а профайлер показывает мой #of-хит как 3 раза, так как подсчет количества узлов пользователя подсчитывается.neo4j cypher производительность агрегации нужна помощь

MATCH (user:User) 
WHERE NOT(user-[:r1]->(:L1)) AND NOT(user-[:r2]->(:L2)) 
return count(user) 

Интересно, если есть способ, чтобы заставить ее работать быстрее

ответ

1

Да, вы можете использовать size, который будет производить эквивалент Java из getDegree() и является более производительным.

MATCH (user:User) 
WHERE size((user)-[:r1]->(:L1)) = 0 
AND size((user)-[:r2]->(:L2)) = 0 
return count(user) 

Если сравнить планы запросов, вы можете увидеть, что план с размером более линейна:

С WHERE NOT:

enter image description here

С size() (getDegree)

enter image description here

+0

извините @ Кристофе, но профайлер показывает еще больше хитов db. im using version 2.3 m2 в настоящее время –

+0

У меня пока нет профилированных запросов такого рода, но для релизов 2.3 этапа. Я проверю это –

+0

@LiorGoldemberg - больше dbhits не меняет этот запрос быстрее или медленнее. Оформить заказ на эту статью - http://neo4j.com/blog/neo4j-2-2-query-tuning/ – FylmTM

Смежные вопросы