数据库里有一张表,表里数据量比较大,例如数量级在百万,如果有一个页面需要显示这些数据,应该怎么处理?一般是SQL层面的分页?具体如何实现?
解决方案 »
- 工程里面总是在报log4j的错.控制台不打印sql语句,什么问题啊
- JSP用MVC时提示bean bvo not found within scope
- 在Myeclipse中用Swing可视化做一个Web服务器界面,上面的按钮怎么做事件处理,是不是要写代码才行啊?亲,跪求答案
- .jsp文件无法打开
- 谁用java 开发过 新浪,qq小纸条之类的。想请教一下
- 为什么只有include来的文件出现乱码??
- TOMCAT5和IIS5的整合,JSP能用,SERVLET不行
- 请教大家如何弹出一个新JSP页面,并设定其的大小?
- 按钮响应问题,很菜的
- 请问如何在<c:foreach>里用<fmt:formatDate>?
- 一个让我头疼的问题
- 将多个excel文件一次性批量导入数据库
补充楼上一句,
mysql 用limit ,PostgreSQL 也用limit
假设数据库是ORACLE10G,一个查询页面,可以带条件,但默认是无条件的,即查出全部(可能几百万数据,用户肯定看不完,但就是要这样),如果用翻页,那么是否每点一次下一页或上一页都要去数据库里查一把?再具体点,表名为TableA,有字段field1,field2,SQL要怎么实现
是滴!!!
ORACLE中的
查出第10-20条记录
select * from ( select row_.*, rownum rownum_ from (你的查询条件 ) row_ where rownum <= 20) where rownum_ > 10
对的。.. 除非你觉的一下子查出那么多条记录速度不慢
然后把它放在一个PagedListHolder 用PagedListHolder来分页
几百万的数据量,人这个动物是不可能一眼看完的.
显示数据的时候,应该是一个带竖滚动条的表格,
默认只查询显示当前可见范围内的数据,
用户拉动滚动条时,你再用ajax去查和显示.
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
逻辑可以定义一个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了。
是的,翻页的话是去重新查询数据库,上百万数据量的表只能采用这种方式。有兴趣的话可以去看看《POJOs in Action》一书的第 11 章,对分页有详尽的介绍。另外,如果数据的更新并不是非常频繁,而且查询条件也不是很多的话,查询结果集可以使用一个 LRUMap 缓存几页的数据,
这样可以在用户来回翻页的时候更为快速地进行响应,而无需与数据库进行交互。当然了 LRUMap 的大小不能太大,否则会
大量地占用服务器的内存。Apache Commons Collections 中有现成的 LRUMap 可以直接拿来用的。
如果没猜错你应该在做报表,建议在加上个分页查询 ,查询的每个页面展现的数据控制在1000条以内。