Elusión de la cláusula WITH cuando sea posible
La cláusula WITH en openCypher actúa como un límite donde se ejecuta todo lo que hay antes de ella y, a continuación, los valores resultantes se pasan al resto de partes de la consulta. La cláusula WITH es necesaria cuando se requiere una agregación provisional o se desea limitar el número de resultados, pero, aparte de eso, se debe intentar evitar su uso. La recomendación general consiste es eliminar estas cláusulas WITH simples (sin agregación, ordenación o limitación) para que el planificador de consultas pueda trabajar en toda la consulta y crear un plan óptimo en su conjunto. Por ejemplo, supongamos que ha escrito una consulta para obtener todas las personas que viven enIndia:
MATCH (person)-[:lives_in]->(city) WITH person, city MATCH (city)-[:part_of]->(country {name: 'India'}) RETURN collect(person) AS result
En la versión anterior, la cláusula WITH restringe la ubicación del patrón (city)-[:part_of]->(country {name: 'India'}) (que es más restrictivo) antes de (person)-[:lives_in]->(city). De este modo, el plan no es óptimo. Para optimizar esta consulta, se podría eliminar la cláusula WITH y dejar que el planificador calcule el mejor plan.
MATCH (person)-[:lives_in]->(city) MATCH (city)-[:part_of]->(country {name: 'India'}) RETURN collect(person) AS result