如果某个表中的记录数很多比如说有几万条、十几万条同时可能查询出来的记录也很多时
使用adodb.recordset对web记录的分页的效果不是很好:
一、在WEB服务器和数据库服务器之间网络传输量大;
二、WEB服务器处理大数据集可能会很慢。
以下采用的方法减轻了网络传输量和WEB服务器的负担。但是这些方法对数据库服务器
负担的影响如何、哪种方法比较合适我不是很清楚。请各位赐教!
我自己在ORACLE应用中采用的方法是
1)SELECT ...
FROM (SELECT ROWNUM rnum, ... FROM ...)
WHERE rnum BETWEEN :low AND :high AND rownum <(:high :low + 1);
在ORACLE中还可以是
2)select ... where rownum < 50 minus select ... where rownum < 30
3)SELECT results.* FROM
( SELECT t2.*, rownum rownumber FROM
( SELECT t.* FROM table t WHERE ORDER BY col) t2) results
WHERE results.rownumber BETWEEN 30 and 50 ORDER BY col
4)游标
现在在SQLSERVER应用中:
有
a)execute("create table #a(id int IDENTITY,表列)
insert into #a
select 表列 from 表
select 表列 from #a
where id between (页号-1)*每页行数+1 and 页号*每页行数 ")
b)DECLARE @LastKEY CHAR(10)
SELECT @LastKEY = MAX(KEY_Fd) FROM (SELECT TOP 18 KEY_Fd FROM
TABLENAME ORDER BY KEY_Fd)
SELECT TOP 6 * FROM TABLENAME WHERE KEY_Fd > @LastKEY ORDER BY KEY_Fd
我记得有一本书上说过一种方法,很笨,供你参考:
前提,你的表有主键。
比如你一页要查询20条记录,那么第一页时
select top 20 * from tables order by 主键.
然后,你记下最后一个主键的值。下一次查询时,
select top 20 * from table where 主键>上次的最后一个值 order by 主键.
这样你的编程应该很简单的。