Если предположить, что значение свойства sym_dev
уникально для каждого узла symaccess_symdev
, тогда этот запрос может быть быстрее:
CALL apoc.load.json('file:////root/output/1530115956414/dev.json') YIELD
value AS row UNWIND row.symdev AS symdevs
MERGE (a:symaccess_symdev {sym_dev: symdevs.sym_dev})
ON CREATE SET
a.host_lun = symdevs.host_lun,
a.ini_tiator_group_name = symdevs.ini_tiator_group_name,
a.dir_port = symdevs.dir_port,
a.attr_percentage = symdevs.attr_percentage,
a.cap_mb = toFloat(symdevs.cap_mb),
a.physicaldevicename = symdevs.physicaldevicename;
A MERGE
будет использовать не более одного индекса, поэтому ваш текущий запрос заставит планировщика Cypher выбрать один индекс (из 4 применимых). После использования этого индекса для генерации набора узлов-кандидатов ему все равно нужно будет проверить остальные 3 свойства для каждого узла-кандидата. Если бы он выбрал индекс, который не очень избирателен (потому что, как правило, существует много узлов с одинаковым значением свойства), то для MERGE
.
нужно было бы проделать большую работу.
Предполагая, что значение свойства sym_dev
уникально, приведенный выше запрос упрощает MERGE
, так что он быстро обнаружит, существует ли требуемый symaccess_symdev
узел, и без необходимости проверять какие-либо другие свойства.