2016-06-02 2 views
0

У меня есть наивный вопрос относительно использования ключевого слова DISTINCT. Поэтому в основном у меня есть график (User- [Likes] -> Item) с миллионами узлов. Я хочу найти отдельных пользователей, которые любят определенный элемент. Следующие два запроса имеют значительную разницу в производительности, и я смущен. Я создаю индекс: Item (id) и: User (id).Производительность запроса Neo4j с ключевыми словами

Запрос 1:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User) 
return count(distinct u); 

Запрос 2:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User) 
return distinct u; 

Первый запрос возвращает результат в секундах, а второй запрос продолжает работать в течение более 5 минут, и я потерял пациент и остановить запрос , Я думал, что второй запрос будет быстрее, чем первый запрос, поскольку нет операции агрегации подсчета, поэтому я не понимаю разницу в производительности.

+2

Не первый запрос, возвращающий одно число, в то время как второй запрос возвращает, возможно, тысячи (или * миллионов? *) Узлов? –

+0

Вы должны запустить второй запрос от драйвера или добавить LIMIT 100 или около того в конце. –

ответ

1

Ваш первый запрос возвращает только количество различных значений, что является легкой задачей для neo4j.

Принимая во внимание, что ваш второй запрос возвращает все узлы, которые являются различными, если ваша база данных имеет слишком много разных значений, это займет много времени. Если вы просто хотите взглянуть на несколько разных значений, вы можете добавить limit к вашему запросу.

Например:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User) 
return distinct u 
limit 5; 

возвращает (случайные) пять пользователей, которые like пункт ('001').

+0

Теперь я понимаю. Однако вместо того, чтобы перечислять различные значения, моя задача - перечислить всех отдельных пользователей и сохранить их одинаковыми для процесса. Означает ли это, что я должен ждать до завершения запроса? Есть ли альтернативные более эффективные способы? Благодаря! – Idealist

+0

Это может помочь: [настройка запроса] (http://neo4j.com/blog/neo4j-2-2-query-tuning/) –

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