如何在Cypher查询中使用skip和limit获取总行数?

3
我能够使用skip、limit(和order by)来获取UI中特定页面的内容。例如,要呈现页面大小为m的第n页,UI会请求跳过n*m条数据并限制为m条。
但是,UI希望生成所有可能页面的链接。为此,我需要返回neo4j中可用的总行数。例如,对于总共p行,UI将生成超链接1,2,3... (p/m)。
在使用Cypher时,获得使用skip、limit的总行数的最佳(性能方面)方法是什么?
1个回答

4

一般来说,不建议获取所有结果,因为这需要将大量的图形数据读入内存。

您有两个选择:

  1. 使用简化版本的查询作为单独的计数查询(也可以异步运行)
  2. 将计数查询和实际查询合并成一个查询,但它比您的跳过-限制查询要昂贵得多,在最坏情况下,总计数/页大小次更昂贵

    从节点n=node:User(name={username})开始 匹配n-[:KNOWS]->() 以n,count(*) as total为基础 匹配n-[:KNOWS]->m 返回m.name, total 跳过{offset} 限制{pagesize}


谢谢Michael。我在执行计划中看到了_rows。没有API可以提取那个信息吗? - Debajyoti Roy
对于一些非常糟糕的实体关系,计数查询需要一秒钟的时间,而使用跳过和限制获取数据只需不到5毫秒。(这是基于10个执行缓存引擎和使用参数化cypher) - Debajyoti Roy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接