Я добавляю связи с запросом UNWIND
(neo4j 3.4.7, куча 30 ГБ, кэш страницы 30 ГБ):
UNWIND { rels } AS rel
MATCH (a:Locus), (b:Snp)
WHERE a.chr = rel.start_chr AND a.start = rel.start_start AND a.end = rel.start_end AND a.ref = rel.start_ref AND b.sid = rel.end_sid
CREATE (a)-[r:TEST_MAPS]->(b)
SET r = rel.properties
Вот примеры параметров:
:param rels => [{start_chr: '6', start_start: 93922926, start_end: 93922926, start_ref: 'h37', end_sid: 'rs782706', properties: {source: 'binder_immuno', uuid: 'e2ee1287-9894-4eb4-8ba8-d8adc4959e50'}}]
Свойства индексируются с помощью :Snp(sid)
и :Locus(chr, start, end, ref)
.
Проблема : добавление связей происходит очень медленно.
При создании отношений планировщик запросов используетбыстрый NodeIndexSeek
на a:Locus
, но использует намного медленнее NodeIndexScan
на b:Snp
(по крайней мере, на один порядок медленнее).
Выбор планировщика зависит от меток, которыеиспользуется, то есть добавление отношений таким же образом с другими метками было быстрым и использовалось только NodeIndexSeek
.
Я знаю, что могу заставить планировщика использовать поиск на b:Snp
.Однако есть ли способ заставить Сайфера всегда выполнять поиск, когда индекс доступен без изменения запроса?