【发布时间】:2023-02-15 11:16:38
【问题描述】:
我有两个查询,一个是通常编写分页查询的方式
MATCH (e:Event), (e)--(l:Place), (e)--(u:User)
OPTIONAL MATCH (e)--(ls:LiveStream)
WITH e {
.*,
_id: id(e),
location: properties(l),
livestream: properties(ls),
photos: [(e)--(p:Photo) | p.url],
createdAt: toString(e.createdAt),
tags: [(e)--(t:Tag) | properties(t)]
} AS event
RETURN event
SKIP $page * $size
LIMIT $size
下一个在 Event 节点上使用早期的 SKIP 和 LIMIT
MATCH (e:Event)
WITH e SKIP $page * $size LIMIT $size
MATCH (e)--(l:Place), (e)--(u:User)
OPTIONAL MATCH (e)--(ls:LiveStream)
WITH e {
.*,
_id: id(e),
location: properties(l),
livestream: properties(ls),
photos: [(e)--(p:Photo) | p.url],
createdAt: toString(e.createdAt),
tags: [(e)--(t:Tag) | properties(t)]
} AS event
RETURN event
使用 SKIP 值为 0 和 LIMIT 为 10,第一个的查询规划器产生
而第二个产量的查询计划器
第一个似乎遍历整个数据库,而第二个只从 10 个
Event节点开始。两者的优缺点是什么,尤其是随着数据库中数据量的增加。
【问题讨论】:
标签: database optimization neo4j cypher query-optimization