【问题标题】:pagination using MySQL database and Java ResultSet使用 MySQL 数据库和 Java ResultSet 进行分页
【发布时间】:2016-01-21 19:47:43
【问题描述】:

要在列表上实现分页,我需要做两个查询:

  1. 使用 SELECT COUNT(*) 从选定表中获取元素计数...
  2. 在查询中使用 LIMIT 和 OFFSET 获取列表子集。

有什么办法可以避免这种情况吗?是否有任何元数据存储在其中?

函数 resultSet.getRow() 检索列表的数组索引,然后我需要进行查询,其结果是所有行。在我得到一个子集之后,但这太贵了。

我想发送一个带有限制和偏移量的唯一查询,并检索所选数据和数据总数。

这可能吗?

提前致谢, 娟

【问题讨论】:

    标签: java mysql pagination


    【解决方案1】:

    我看到了一些关于这方面的事情,然后新的疑问出现在我身上。

    当查询有限制时,我们可以在“选择”部分添加 SQL_CALC_FOUND_ROWS *,如下所示:

    “SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 0,10”

    之后,我查询如下:

    “选择 FOUND_ROWS()”

    我了解第一个查询将计数存储在内部 var 中,其值将在第二个查询中返回。第二个查询不是“select count(*) ...”查询,因此“SELECT FOUND_ROWS()”查询应该很便宜。

    我说的对吗?

    我所做的一些测试显示如下:

    --拳头选择计数(*),第二次选择有限制--

    测试 1:194 毫秒

    out: {"total":94607,"list":["2 - 1397199600000","2 - 1397286000000","13 - 1398150000000","13 - 1398236400000","13 - 1398322800000","13 - 1398409200000","13 - 1398495600000","14 - 1398150000000","14 - 1398236400000","14 - 1398322800000"]}

    --新的方式--

    测试 2:555 毫秒 出:{“总数”:94607,“列表”:[“2 - 1397199600000”,“2 - 1397286000000”,“13 - 1398150000000”,“13 - 1398236400000”,“13 - 1398322800000”,“13 - 1398409200” "13 - 1398495600000","14 - 1398150000000","14 - 1398236400000","14 - 1398322800000"]}

    为什么测试没有显示预期的结果? 我的假设是错误的?

    谢谢,问候

    【讨论】:

      【解决方案2】:

      我已经解决了问题

      下一个链接已经得到响应。

      https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 2011-07-18
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-07-10
        相关资源
        最近更新 更多