数据库里有一张表,表里数据量比较大,例如数量级在百万,如果有一个页面需要显示这些数据,应该怎么处理?一般是SQL层面的分页?具体如何实现?

解决方案 »

  1.   

    用分页实现啊,具体的分页代码在网上有很多,主要是使用sql语句来进行,sqlserver使用top,oracle使用rownum
      

  2.   

    请楼主说明一下 数据库
    补充楼上一句,
    mysql 用limit ,PostgreSQL 也用limit
      

  3.   

    具体....
    假设数据库是ORACLE10G,一个查询页面,可以带条件,但默认是无条件的,即查出全部(可能几百万数据,用户肯定看不完,但就是要这样),如果用翻页,那么是否每点一次下一页或上一页都要去数据库里查一把?再具体点,表名为TableA,有字段field1,field2,SQL要怎么实现
      

  4.   

    如果用翻页,那么是否每点一次下一页或上一页都要去数据库里查一把?
    是滴!!!
    ORACLE中的
    查出第10-20条记录
    select * from ( select row_.*, rownum rownum_ from (你的查询条件 ) row_ where rownum <= 20) where rownum_ > 10
      

  5.   


    对的。.. 除非你觉的一下子查出那么多条记录速度不慢
    然后把它放在一个PagedListHolder  用PagedListHolder来分页
      

  6.   

    select 不要用*号...要什么字段查什么字段 那样会快很多..>_<
      

  7.   

    各个数据库有各自的部分查询方法,都是从sql语句着手
      

  8.   

    这样在数据库层面分页我估计比普通查询慢很多,没办法的情况下估计只有数据分页取一大块然后再页面分成小页,可能这样会好一点,如果频繁的跑那个SQL,估计用户要等疯掉,除了这种分页方式,还有其他的解决办法吗?
      

  9.   

    可以不用翻页.
    几百万的数据量,人这个动物是不可能一眼看完的.
    显示数据的时候,应该是一个带竖滚动条的表格,
    默认只查询显示当前可见范围内的数据,
    用户拉动滚动条时,你再用ajax去查和显示.
      

  10.   

    可以试试下面的两个 SQL 语句:SELECT * FROM (
      SELECT t.*, row_number() OVER(ORDER BY id) AS rn FROM t_mt_stat t
    ) x
    WHERE x.rn BETWEEN 11 AND 20
    SELECT * FROM (
      SELECT t.*, rownum rn FROM (
        SELECT * FROM t_mt_stat ORDER BY id
      ) t
      WHERE rownum <= 20
    ) x
    WHERE x.rn >= 11
      

  11.   

    数据库类似这样。
    逻辑可以定义一个Pager类,有如下属性。private int itemTotalCount;
    private int perPage;
    private int currentPageIndex = 0;
    private int nextPage;
    private int previousPage;
    private boolean existNextPage;
    private boolean existPreviousPage;
    private ArrayList pageList = null;然后把你要显示的数据以及主键做一个bean,里面最好设置一个list的属性,
    如果是用struts的话,直接用遍历控件对应其字段名就ok了。
      

  12.   


    是的,翻页的话是去重新查询数据库,上百万数据量的表只能采用这种方式。有兴趣的话可以去看看《POJOs in Action》一书的第 11 章,对分页有详尽的介绍。另外,如果数据的更新并不是非常频繁,而且查询条件也不是很多的话,查询结果集可以使用一个 LRUMap 缓存几页的数据,
    这样可以在用户来回翻页的时候更为快速地进行响应,而无需与数据库进行交互。当然了 LRUMap 的大小不能太大,否则会
    大量地占用服务器的内存。Apache Commons Collections 中有现成的 LRUMap 可以直接拿来用的。
      

  13.   

    最佳答案: 采用 Oracle 的老化和分区策略,将百万当量的数据缩减成10万以内,这样查询就会很快了。
    如果没猜错你应该在做报表,建议在加上个分页查询 ,查询的每个页面展现的数据控制在1000条以内。