Оптимизация запросов на совпадение для нескольких узлов Neo4j - PullRequest
0 голосов
/ 28 сентября 2018

Я выполняю запрос к 3 таблицам, которые связаны с одним и тем же идентификатором приложения.Однако этот запрос выполняется слишком долго, чтобы получить какой-либо результат.Как я могу оптимизировать этот запрос?Идентификатор application_id, по которому создаются оба ребра, должен быть одинаковым для узлов Sms и Pcb.

Это сам запрос:

 MATCH (pcb:PhoneContactsBook)-[:APP_PCB]->(a:Applications)-[:APP_SMS]->(sms:Sms)
    RETURN distinct a.application_id

Чтобы получить план запроса, я выполняю этот запросс LIMIT 200,000 и я получаю 1046648 полных обращений в дБ за 1251 мс.

Вот план запроса:

enter image description here

1 Ответ

0 голосов
/ 28 сентября 2018

Во-первых, чтобы получить план запроса, вы можете использовать EXPLAIN вместо PROFILE:

  • EXPLAIN не запускать запрос и только предоставлять вам план запроса запроса
  • PROFILE выполняет запрос и дает вам результат вашего запроса + его план запроса

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

Но, похоже, у вас есть много экземпляров этого шаблона в вашей базе данных (более 200 000), поэтому этот запрос занимает несколько раз (~ 6 микросекунд на шаблон неплохо ^^)

...