У меня есть график с несколькими связанными узлами, и я хочу найти все: помеченные узлы, у которых есть хотя бы один дочерний узел с меткой: B, которые имеют одинаковое имя и старое имя.
Общее количествоколичество узлов + 6M: узлы A и + 60M: узлы B (каждый узел B связан только с одним узлом A, но каждый узел связан с узлами n B)
до сих порСамый эффективный способ, который я нашел, - найти правильные: узлы B, а затем сопоставить их с узлами: A, наоборот - медленнее
Метод 1
Match (b:B)
where b.val1<>b.val2
with b
match (a:A)-[:Link]-(b)
return count(distinct a)
Версия Cypher: CYPHER 3.5, планировщик: СТОИМОСТЬ, время выполнения: Скомпилировано.155619605 всего дБ за 3756615 мс.
метод результата планирования 1
Метод 2
Match (a:A)-[:Link]-(b:B)
where b.val1<>b.val2
return count(distinct a)
Результат:
Версия Cypher: CYPHER 3.5, планировщик: COST, время выполнения: COMPILED.155619605 всего дБ за 7122106 мс.
метод результата планировщика 2
Исправьте меня, если я ошибаюсь, но я думаю, что цикл должен быть быстреечерез узлы A (так как их всего + 6M), вместо того, чтобы сначала найти дочерний элемент: B, который удовлетворяет условию, а затем выполнить цикл по связанным узлам: A.