Я пытаюсь найти 10 сообщений, которые не понравились пользователю mike, используя cypher. Будет ли размещение предложения where с отношением NOT более эффективным, чем сопоставление с необязательным отношением, а затем проверка того, является ли это отношение нулевым в предложении where? В частности, я хочу убедиться, что он не будет выполнять эквивалент полного сканирования таблицы, и убедиться, что это масштабируемый запрос.
Вот что я использую
START user=node:node_auto_index(uname:"mike"),
posts=node:node_auto_index("postId:*")
WHERE not (user-[:LIKES]->posts)
RETURN posts SKIP 20 LIMIT 10;
Или я могу сделать что-то, где я отфильтровываю необязательную связь MATCH
START user=node:node_auto_index(uname="mike"),
posts=node:node_auto_index("postId:*")
MATCH user-[r?:LIKES]->posts
WHERE r IS NULL
RETURN posts SKIP 100 LIMIT 10;
Некоторые быстрые тесты на консоли, кажется, показывают более высокую производительность при втором подходе. Правильно ли я предполагаю, что второй запрос быстрее? И если да, то почему?