Я пытаюсь профилировать запрос в Neo4j Cypher.
Я начал с этого запроса:
PROFILE MATCH (t1:Trip{Direction:1, Route:"01"}),(t2:Trip{Direction:0, Route:"01"})
WITH t1, t2 LIMIT 1
MATCH p4 = (t2)−[:STARTS|STOPS|ENDS]−>(:BusStop), p3=(t1)−[:STARTS|STOPS|ENDS]−(:BusStop)
RETURN p3, p4;
и получил следующий план выполнения:
с общим количеством попаданий в дБ 10. Профилирование запроса довольно быстрое.
В этот вебинар в 32 минуты,предлагает избежать операций с декартовыми произведениями.В соответствии с этим я преобразовал запрос в следующее:
PROFILE MATCH (t1:Trip{Direction:1, Route:"01"})
WITH t1 LIMIT 1
MATCH (t2:Trip{Direction:0, Route:"01"})
WITH t1, t2 LIMIT 1
RETURN t1, t2;
, что привело к этому плану выполнения:
с общим итогомхиты дБ 11: оно увеличилось.
Теперь профилирование показывает, что декартово произведение исчезло, однако выполнение выглядит намного медленнее, а удары дБ увеличилось.
Почему оно медленнее, хотя исчезло декартово произведение?Какой запрос лучше: тот, у которого нет декартовых произведений, или тот, у которого меньше хитов?Как я могу улучшить свой запрос?