************如何实现分页加速查询*************
现在分页已经有了。但是如果查询的数据量超过10万的话,那么速度就很慢了。
有没有高手可以给点提示,如何解决一下,比如一次查询就差出来一页的数据量,10条,那么翻页就查出来下一个10条,这样速度就提上去了。不知道如何实现,在那里突破;
现在的每次翻页都是把数据库里面的全部查询一次,只是显示选择的页而已。
------解决方案--------------------你怎么分页的?
------解决方案--------------------数据库里面可以限制你查的记录从多少条到多少条的啊!
------解决方案--------------------用Hibernate里的分页查询
------解决方案--------------------mysql limit
sql2000 top
oracle rownum
------解决方案--------------------http://zhidao.baidu.com/question/70930846.html 百度知道
------解决方案--------------------select top页面 ×显示数 where id not in (select top (页面-1) ×显示数)
------解决方案--------------------mark
------解决方案--------------------
第n页. 每页显示x条
mysql: SELECT * FROM USER limit (n - 1) * x, x
sql2000: SELECT * FROM (SELECT TOP n * x FROM USER) WHERE id NOT IN (SELECT TOP (n - 1) * x id FROM USER);
oracle: SELECT * FROM (
SELECT users.*, ROWNUM RN FROM (SELECT * FROM USER) users
WHERE ROWNUM < (n * x)
)
WHERE RN >= (n - 1) * x
USER
id | username | password
------------------------
| |
| |
| |
------解决方案--------------------hibernate: getSession().createQuery("FROM User").setFirstResult(开始记录数).setMaxResults(每页显示多少条);
------解决方案--------------------肯定是后台动手脚了
每次查询只取出当前页面的数据量
看你用什么了
9楼10楼不错
------解决方案--------------------LZ的是假分页。
------解决方案--------------------每次翻页的时候,就去查询一下数据库,给一个查询的范围,比如从21——30条,这个应该很好实现啊~~
楼主不会是直接把所有的数据全部都load出来了吧~~
------解决方案--------------------分页一般有两种 一种就是楼主这样的
适合于数据量小 并且适合换数据库
第二种就是每次只查询每页显示的条数
第二种方法实现的方式有很多 我最喜欢用的就是
搞一个自定义分页标签 这样每次查询的时候只要直接拿过来
修改表名等信息 就可以了
但是自定义标签好像不可以和ajax做集成(数据展示用到ajax)
至于具体的自定义标签网上一大把
------解决方案--------------------在数据库中分页感觉是最快的!
------解决方案--------------------Hibernate里的分页查询
------解决方案--------------------我处理过最多的数据时45万条,SqlServer2005 不能使用top 使用top超慢,还不如使用结果集分,
9楼和10楼 是目前最好的解决办法了
------解决方案--------------------使用预抓取
------解决方案--------------------Java code
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
/**
* Pager, 基于 JDBC 2.0 滚动机制的分页程序, 在 MySQL, SQLServer, Access, Oracle 下测试通过.
*
*/
public class Pager {
/** Used database connection */
Connection conn = null;
public Pager() {
}
/**
*
* 分页功能, 返回当页的数据(JDBC 2.0 实现).
* @param currentPage
* 当前页面数(取值范围: 从 1 开始有效, 0 自动改为 1)
* @param pageCount
* 每页显示记录
* @return a Vector - 数据列表
*/
public Vector pageData(int currentPage, int pageCount) {
Vector results = new Vector();
String tableName = "table_name";// 要处理的表格名
ResultSet rs = null;
String sql = "SELECT * FROM " + tableName;
Statement stmt = null;
try {
// 生成可滚动的结果集表达式
stmt = conn.createStatement(ResultSet.
TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
int count = recordCount(); // 总记录数
int totalPage = (int) Math.ceil(1.0 * count / pageCount); // 总页面数