页面需要显示总共有多少页,还要显示当前页的数据。这个必须查两次吗?有没有什么好的办法?

解决方案 »

  1.   

    2次。如果有主键或者非null行上的索引,count可以利用索引,也还挺快的。
      

  2.   

    如果是JDBC,可以先执行ResultSet.last(),然后再执行ResultSet.getRow()获取总记录数。
      

  3.   

    可以使用分析函数把总记录数检索出来,比如
    标准分页SQL:SELECT COUNT(*) FROM employees;  COUNT(*)
    ----------
            61SELECT n.employee_id
      FROM (SELECT m.employee_id,
                   ROWNUM rn
              FROM (SELECT t.employee_id
                      FROM employees t
                     ORDER BY t.employee_id) m
             WHERE ROWNUM <= 4) n
     WHERE n.rn >= 2EMPLOYEE_ID
    -----------
              2
              3
              4分析函数:SELECT n.employee_id,
           n.total_cnt
      FROM (SELECT m.employee_id,
                   m.total_cnt,
                   ROWNUM rn
              FROM (SELECT t.employee_id,
                           COUNT(*) OVER() total_cnt
                      FROM employees t
                     ORDER BY t.employee_id) m
             WHERE ROWNUM <= 4) n
     WHERE n.rn >= 2EMPLOYEE_ID  TOTAL_CNT
    ----------- ----------
              2         61
              3         61
              4         61然后根据第一行TOTAL_CNT获取记录数就可以了。