日期:2014-05-18  浏览次数:20670 次

************如何实现分页加速查询*************
现在分页已经有了。但是如果查询的数据量超过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); // 总页面数