Вы создаете декартовы произведения между вашими переменными.Если вы ПРОФИЛИРУЕТЕ свой запрос, то увидите, как количество строк, проходящих между операциями, увеличивается по мере его выполнения.
Кроме того, вы исключили query1_result
из области видимости, поскольку не включили его в WITH ввторой запрос.WITH меняет то, что находится в области видимости;если вы хотите, чтобы он продолжал оставаться в области действия, вам нужно включить его.
Чтобы это исправить, вы, вероятно, захотите убедиться, что вы собираете свои результаты по пути (например, собирая результаты вашего первогозапрос, так что количество элементов падает до 1, чтобы избежать мультипликативного выполнения следующих операций), затем сделайте то же самое для запроса 2, и если вам нужны результаты в виде строк, разверните их для запроса 3 (хотя в вашем случае используйте in
для членства в спискедолжно быть достаточно).
Попробуйте:
// First Query
MATCH p=(startnode:DerivTree)-[:IsDerivedFrom*0..]->(endnode:DerivTree)
WHERE startnode.dbvid=$extParam
UNWIND nodes(p) as query1 // this is not a list, so rename the variable
WITH collect(distinct query1.dbvid) as query1_results // cardinality at 1 row
// Second Query
MATCH (d:Resource {deleted:true})
WHERE d.dbvid=$extParam
WITH query1_results, COLLECT(d) AS query2_results // cardinality at 1 row
// Third Query
MATCH (n:Resource)
WHERE n.prop1 in query1_results
AND not n.prop2 in query2_results
AND EXISTS(n.prop3)
RETURN n