Atualizar/mesclar vários nós
Ao executar consultas MERGE ou CREATE em vários nós, é recomendável usar UNWIND em uma combinação com uma única cláusula MERGE/CREATE em vez de usar uma cláusula MERGE/CREATE para cada nó. As consultas que usam uma cláusula por nó levam a um plano de execução ineficiente devido à necessidade de otimizar cada linha. Isso faz com que a maior parte do tempo de execução da consulta seja gasto no processamento estático em vez da atualização real.
Uma cláusula por nó não é ideal, pois não é escalável com o aumento do número de nós:
MERGE (p1:Person {name: 'NameA'}) ON CREATE SET p1 += {prop1: 'prop1V1', prop2: 'prop2V1'} MERGE (p2:Person {name: 'NameB'}) ON CREATE SET p2 += {prop1: 'prop1V2', prop2: 'prop2V2'} MERGE (p3:Person {name: 'NameC'}) ON CREATE SET p3 += {prop1: 'prop1V3', prop2: 'prop1V3'}
Usar uma cláusula UNWIND junto com uma cláusula MERGE/CREATE permite o mesmo comportamento, mas um plano de execução mais otimizado. Com isso em mente, a consulta alterada ficaria assim:
## If not using custom id for nodes/relationship UNWIND [{name: 'NameA', prop1: 'prop1V1', prop2: 'prop2V1'}, {name: 'NameB', prop1: 'prop1V2', prop2: 'prop2V2'}, {name: 'NameC', prop1: 'prop1V3', prop2: 'prop1V3'}] AS props MERGE (p:Person {name: props.name}) ON CREATE SET p = props ## If using custom id for nodes/relationship UNWIND [{`~id`: '1', 'name': 'NameA', 'prop1: 'prop1V1', prop2: 'prop2V1'}, {`~id`: '2', name: 'NameB', prop1: 'prop1V2', prop2: 'prop2V2'}, {`~id`: '3', name: 'NameC', prop1: 'prop1V3', prop2: 'prop1V3'}] AS props MERGE (p:Person {`~id`: props.id}) ON CREATE SET p = removeKeyFromMap(props, '~id')