Uso de mapas aplanados en lugar de mapas anidados en la cláusula UNWIND
Una estructura anidada profunda puede limitar la capacidad del motor de consultas para generar un plan de consulta óptimo. Para solucionar parcialmente este problema, los siguientes patrones definidos crearán planes óptimos para los siguientes escenarios:
-
Escenario 1: UNWIND con una lista de literales cypher, que incluye NUMBER, STRING y BOOLEAN.
-
Escenario 2: UNWIND con una lista de mapas aplanados, que incluye solo literales cypher (NUMBER, STRING, BOOLEAN) como valores.
Al escribir una consulta que contenga la cláusula UNWIND, utilice la recomendación anterior para mejorar el rendimiento.
Ejemplos del escenario 1:
UNWIND $ids as x MATCH(t:ticket {`~id`: x})
Con los parámetros:
parameters={ "ids": [1, 2, 3] }
Un ejemplo para el escenario 2 es generar una lista de nodos para CREATE o MERGE. En lugar de emitir varias instrucciones, utilice el siguiente patrón para definir las propiedades como un conjunto de mapas aplanados:
UNWIND $props as p CREATE(t:ticket {title: p.title, severity:p.severity})
Con los parámetros:
parameters={ "props": [ {"title": "food poisoning", "severity": "2"}, {"title": "Simone is in office", "severity": "3"} ] }
En lugar de objetos de nodo anidados como:
UNWIND $nodes as n CREATE(t:ticket n.properties)
Con los parámetros:
parameters={ "nodes": [ {"id": "ticket1", "properties": {"title": "food poisoning", "severity": "2"}}, {"id": "ticket2", "properties": {"title": "Simone is in office", "severity": "3"}} ] }