mysql分页怎么实现 mysql分页实现原理( 五 )


SET p:= 0;
UPDATE news SET page=CEIL((p:= p + 1) / $perpage) ORDER BY id DESC;
当然 , 也可以新增一个专用于分页的表,可以用个后台程序来维护 。
UPDATE pagination T
JOIN (
SELECT id, CEIL((p:= p + 1) / $perpage) page
FROM news
ORDER BY id
)C
ON C.id = T.id
SET T.page = C.page;
现在想获取任意一页的元素就很简单了:
SELECT *
FROM news A
JOIN pagination B ON A.id=B.ID
WHERE page=$offset;
还有另外一种与上种方法比较相似的方法来做分页,这种方式比较试用于数据集相对?。?并且没有可用的索引的情况下—比如处理搜索结果时 。在一个普通的服务器上执行下面的查询,当有2M条记录时,要耗费2sec左右 。这种方式比较简单,创建一个用来存储所有Id的临时表即可(这也是最耗费性能的地方) 。
CREATE TEMPORARY TABLE _tmp (KEY SORT(random))
SELECT id, FLOOR(RAND() * 0x8000000) random
FROM city;
ALTER TABLE _tmp ADD OFFSET INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, DROP INDEX SORT,ORDER BY random;
接下来就可以向下面一样执行分页查询了 。
SELECT *
FROM _tmp
WHERE OFFSET = $offset
ORDER BY OFFSET
LIMIT $perpage;
简单来说 , 对于分页的优化就是 。。。避免数据量大时扫描过多的记录 。
JSP+MYSQL分页这么弄?分类:电脑/网络软件
问题描述:
我制作的是留言版,回复时得弄分页,但是不知道分页怎么弄,网上的代码没有注释 , 也看不懂 。
请各位大哥大姐们一定要帮帮我,后面加上注释 , 谢谢!
注意:我不用JavaBean写,就用前台写 。
解析:
作为参考:
%@ page contentType="text/;charset=8859_1" %
%
变量声明
java.sql.Connection sqlCon; 数据库连接对象
java.sql.Statement sqlStmt; SQL语句对象
java.sql.ResultSet sqlRst; 结果集对象
javang.String strCon; 数据库连接字符串
javang.String strSQL; SQL语句
int intPageSize; 一页显示的记录数
int intRowCount; 记录总数
int intPageCount; 总页数
int intPage; 待显示页码
javang.String strPage;
int i;
设置一页显示的记录数
intPageSize = 2;
取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{将字符串转换成整型
intPage = javang.Integer.parseInt(strPage);
if(intPage1) intPage = 1;
}
装载JDBC驱动程序
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
设置数据库连接字符串
strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb";
连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq");
创建一个可以滚动的只读的SQL语句对象
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
准备SQL语句
strSQL = "select name,age from test";
执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
获取记录总数
sqlRstst();
intRowCount = sqlRst.getRow();
记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
调整待显示的页码
if(intPageintPageCount) intPage = intPageCount;
%
head
meta -equiv="Content-Type" content="text/; charset=gb2312"
titleJSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle/title
/head
body
table border=1 cellspacing="0" cellpadding="0"
tr
th姓名/th
th年龄/th

推荐阅读