100分求连接oracle数据库的自写分页代码或算法,感激不尽!
楼主xhjf777(古格国王)
2005-11-05 11:21:15 在 .NET
技术
/ C# 提问
如题. ? ? ? ? 问题点数:100、回复次数:8 Top
1 楼smallMage(小马哥) 回复于 2005-11-05 11:50:49 得分 25
搜索一下。太多了。CREATE ? PROCEDURE ? pagination2 ? ? ( ? ? ? @SQL ? nVARCHAR(4000),? ? ? ? --不带排序语句的SQL语句 ? ? ? @Page ? int,? ? ? ? ? ? ? ? ? ? ? ? ? ? --页码 ? ? ? @RecsPerPage ? int,? ? ? ? ? ? ? --每页容纳的记录数 ? ? ? @ID ? VARCHAR(255),? ? ? ? ? ? ? --需要排序的不重复的ID号 ? ? ? @Sort ? VARCHAR(255) ? ? ? ? ? ? --排序字段及规则 ? ? ) ? ? AS ? ? ? ? DECLARE ? @Str ? nVARCHAR(4000) ? ? ? ? SET ? @Str='SELECT ? ? ? TOP ? '+CAST(@RecsPerPage ? AS ? VARCHAR(20))+' ? * ? FROM ? '+@SQL+' ? T ? WHERE ? T.'+@ID+' ? NOT ? IN ? ? ? (SELECT ? ? ? TOP ? '+CAST((@RecsPerPage*(@Page-1)) ? AS ? VARCHAR(20))+' ? '+@ID+' ? FROM ? '+@SQL+' ? T9 ? ORDER ? BY ? '+@Sort+') ? ORDER ? BY ? '+@Sort ? ? ? ? PRINT ? @Str ? ? ? ? EXEC ? sp_ExecuteSql ? @Str ? ? GOTop
2 楼jxufewbt(我的目标是5星) 回复于 2005-11-05 12:01:31 得分 25
type ? refCursorType ? is ? REF ? CURSOR; ? ? --游标类型定义,用于返回数据集 ? ? ? ? procedure ? sp_Page(p_PageSize ? int,? ? ? ? ? ? ? ? ? ? --每页记录数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p_PageNo ? int,? ? ? ? ? ? ? ? ? ? ? ? --当前页码,从 ? 1 ? 开始 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p_SqlSelect ? varchar2,? ? ? ? --查询语句,含排序部分 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p_OutRecordCount ? out ? int,--返回总记录数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p_OutCursor ? out ? refCursorType) ? ? as ? ? ? ? ? ? v_sql ? varchar2(3000); ? ? ? ? ? ? v_count ? int; ? ? ? ? ? ? v_heiRownum ? int; ? ? ? ? ? ? v_lowRownum ? int; ? ? begin ? ? ? ? ----取记录总数 ? ? ? ? v_sql ? := ? 'select ? count(*) ? from ? (' ? || ? p_SqlSelect ? || ? ')'; ? ? ? ? execute ? immediate ? v_sql ? into ? v_count; ? ? ? ? p_OutRecordCount ? := ? v_count; ? ? ? ? ----执行分页查询 ? ? ? ? v_heiRownum ? := ? p_PageNo ? * ? p_PageSize; ? ? ? ? v_lowRownum ? := ? v_heiRownum ? - ? p_PageSize ? + ? 1; ? ? ? ? ? ? v_sql ? := ? 'SELECT ? * ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM ? ( ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SELECT ? A.*,? rownum ? rn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM ? ? ('|| ? p_SqlSelect ? ||') ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHERE ? rownum ? <= ? '|| ? to_char(v_heiRownum) ? || ? ' ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? B ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHERE ? rn ? >= ? ' ? || ? to_char(v_lowRownum) ? ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn ? ? ? ? ? ? ? ? OPEN ? p_OutCursor ? FOR ? ? v_sql; ? ? ? ? end ? sp_Page; ? ? ? ? Top
3 楼xhjf777(古格国王) 回复于 2005-11-05 14:24:38 得分 0
谢谢上面二位,谢谢! ? ? ? ? 我的意思是要一个适合大数据量的高效的解决方案。而且是C#连ORACLE的。oracle是不是不支持top呀? ? ? ? ? to ? ? jxufewbt(我的目标是5星) ?,这个可以查询,但是,这样数据库好像要把数据一次取出来然后生成一个临时表。如果数据量大的时候会很慢。 ? ? ? ? 我想,我的这个问题肯定有很多人在作项目的时候都会遇到,而且也应该有很多人有比较理想的解决方法。由于我不太懂,又是初次使用C#语言,所以希望能有人多加指点。感激不尽! ? ? Top
4 楼xhjf777(古格国王) 回复于 2005-11-05 16:12:18 得分 0
顶上去Top
5 楼mike689689(猫之恋曲) 回复于 2005-11-05 16:23:15 得分 20
使用SI ? object ? browser能更方便的管理和操作oracle数据库,效率也更好,有关资料网上很多Top
6 楼xhjf777(古格国王) 回复于 2005-11-06 09:16:27 得分 0
希望有更多的人参与讨论。 ? ? ? ? 星期天的早晨也不可以睡懒觉,我要努力顶啊顶。Top
7 楼levinknight(Coral) 回复于 2005-11-06 15:03:56 得分 10
顶上去Top
8 楼Sunmast(速马@Redmond,WA) 回复于 2005-11-06 15:18:30 得分 20
select ? * ? from ? t_table ? where ? rowid ? not ? in(select ? rowid ? from ? t_table ? where ? rownum<=200) ? and ? rownum<=200 ? ? ? ? 从第201条记录开始处取200条记录Top
相关问题
哪位高手能告诉我迭代终点拟合算法??感激不尽!!
请数据算法的大虾帮帮忙,小弟感激不尽
有谁能提供此游戏 http://www.yogi.net/JavaDots.html 的算法,感激不尽!!!!!
高分求一类似背包算法,等着急用阿,感激不尽!!!!!!!!
碰到了分页的小问题,哪位大虾帮忙指点一下,感激不尽!!谢谢拉!!
有哪位高手能给我我曲线拟合的算法??在下感激不尽!!
高分求一类似背包算法,能用存储过程写吗?等着急用阿,感激不尽!!!!!!!!
请问谁能提供一下MD5的算法的代码啊,要求非VC的C++版本(即Unix下的),感激不尽,100分哦^_^
特急,特急,高手帮忙,感激不尽,感激不尽!!!
给点帮助感激不尽
讨论:千万级的
数据库
分页算法
楼主yubing8(yubing8)
2003-09-19 18:33:47 在 Java / Web
开发
提问
在网上看了很多很多的分页算法,一般的算法几万条的时候速度相当的不错,可当记录增加到百万级的时候,速度就慢了很多,现在想和大家讨论一下千万级的数据库分页算法,请大家仅管提出自已的看法 问题点数:0、回复次数:50 Top
1 楼dmhorse(dmhorse) 回复于 2003-09-19 18:37:54 得分 0
1.Mysql,use ? limit ? ? 2.MsSql,use ? temp ? table ? ? 3.Oracle,use ? rownumTop
2 楼zeeler(鸭子) 回复于 2003-09-19 18:46:27 得分 0
用JDBC的数据缓冲和连接池技术,优化数据库的索引等等都可以起到一定的作用Top
3 楼yubing8(yubing8) 回复于 2003-09-19 18:48:26 得分 0
可否再详细点,我学jsp没多久Top
4 楼seaman0916(沙漠孤鹰) 回复于 2003-09-19 18:55:05 得分 0
关注 ? .......!Top
5 楼zeeler(鸭子) 回复于 2003-09-19 19:19:47 得分 0
连接池技术可能都很熟悉了,所谓的缓冲技术是指把一部分数据读取到应用程序服务器的缓存中,客户端的相关的查询都在应用程序服务器中执行,需要新的 数据才去连接数据库服务器,Oracle的JDBC就支持这种技术;优化索引是很常见的一种方法,不过不同的数据库有不同的效果,越是数据量大效果越明 显。 ? ? 个人意见,仅供参考Top
6 楼lynx1111(任我行:一个PLMM看着就兴奋的男人) 回复于 2003-09-19 20:34:46 得分 0
从程序中考虑:比如用数据缓冲和连接池技术 ? ? 从数据库服务器端考虑:比如csdn只选出前300行纪录,因为用户不需要那么多纪录。你也不必把1000万条全部分页。你也不必把纪录放在一个表中,一 年(太多就一个月)的数据放一张表或定期把历史数据导出到数据数据仓库中,不要用一张表装1000万条记录。做好索引。优化查询!尽量少用模糊查询,避免 表扫描。不能让客户端连续多次搜索(csdn就是)Top
7 楼conning333(chen) 回复于 2003-09-19 21:12:51 得分 0
楼上有道理。可以学学csdnTop
8 楼yubing8(yubing8) 回复于 2003-09-19 21:58:59 得分 0
感谢大家提供了这么多的好思路,另外还想问一下,怎样在一个表中插入随机记录,我想做个1000万条记录的表,我的存储过程不是很熟Top
9 楼liad() 回复于 2003-09-19 22:06:34 得分 0
你用的是什么数据库?Top
10 楼starfeng(feng) 回复于 2003-09-19 22:19:31 得分 0
你要随机记录的作用是什么了 ? ? 我觉得用序号就可以了 ? ? ? ? 比方说,如果你用的是oracle那么你建一个长为20位的序号,你这一辈子都别想用到重复的.Top
11 楼yubing8(yubing8) 回复于 2003-09-20 11:28:18 得分 0
sql ? server数据库 ? ? 大家看看这条sql语句怎么样啊 ? ? select ? top ? "+pagesize+" ? * ? from ? hisfsjour ? where ? id ? not ? in ? (select ? top ? "+(currpage*pagesize)+" ? id ? from ? hisfsjour) ? ? 当在前面几页时,速度相当的快啊Top
12 楼yubing8(yubing8) 回复于 2003-09-20 11:29:23 得分 0
lynx1111(任我行):你说的那个我以前也想过,但我始终觉的不是最好的解决之道Top
13 楼yubing8(yubing8) 回复于 2003-09-20 11:31:08 得分 0
starfeng(feng) ? :随机记录的目的是为了建立一个一千万条的记录,我不想用delphi写个小程序,只想用存储过程做到Top
14 楼dennis03(葳蕤) 回复于 2003-09-20 11:57:16 得分 0
从用户的角度来讲我认为不会有哪个用户有耐性去浏览这么大数量的页面,能看几十页已经是很有耐性的人了.Top
15 楼xqi8(星期八) 回复于 2003-09-20 13:06:59 得分 0
upTop
16 楼onizuka5211(简单者) 回复于 2003-09-20 13:16:51 得分 0
不太懂缓冲技术,谁能讲一讲呀Top
17 楼yubing8(yubing8) 回复于 2003-09-20 18:44:57 得分 0
dennis03(葳蕤):我只想探讨一下技术 ? ? 现在还有一个解新决方案 ? ? 每次翻页的时候记录一下最后一条记录的id号 ? ? 然后select ? top ? 10 ? * ? form ? tablename ? where ? id>xxx ? ? 这样即使数据量再大也不怕Top
18 楼lynx1111(任我行:一个PLMM看着就兴奋的男人) 回复于 2003-09-20 20:13:23 得分 0
http://www.csdn.net/develop/read_article.asp?id=15464 ? ? http://www.csdn.net/develop/Read_Article.asp?Id=18730 ? ? http://www.csdn.net/develop/Read_Article.asp?Id=16268Top
19 楼joy_wind(wind) 回复于 2003-09-20 20:31:46 得分 0
对于数据分页,已经有现成的模式可以使用——Value ? list模式:http://java.sun.com/blueprints/patterns/ValueListHandler.htmlTop
20 楼yubing8(yubing8) 回复于 2003-09-20 20:53:07 得分 0
http://www.csdn.net/develop/read_article.asp?id=15464 ? ? 这个还不错,前面几页的时候速度很快,后面就不行了 ? ? http://www.csdn.net/develop/Read_Article.asp?Id=18730 ? ? http://www.csdn.net/develop/Read_Article.asp?Id=16268 ? ? 这个主要是jive而且好像是oracle,我用的是sql ? server ? ? Top
21 楼yubing8(yubing8) 回复于 2003-09-21 21:53:37 得分 0
upTop
22 楼yubing8(yubing8) 回复于 2003-09-21 22:03:36 得分 0
joy_wind(wind):我只大概看了一下,请问到哪下载那个javabeanTop
23 楼zxhong(红透半边天) 回复于 2003-09-21 23:08:39 得分 0
如果数据量大,可以用list取全部记录写到内存的方式Top
24 楼rootwuyu(wuyu) 回复于 2003-09-22 01:19:42 得分 0
TO红透半天天, ? 你已经提出了假设“如果数据量大”,这个大是怎么个大法呢?比如一个城市一天的市话话单,一个省一天的短信日志。。也就一天一两个T的存储,我看你怎么“list取全部记录写内存”? ? ? ? ? 如果数据量小的话,按我个人的经验,在1万条记录以下,倒是可以放到内存里面。 ? ? ? ? 上次就有牛人狂推荐这样那样的“最佳分页方案”,到后来又在OTN上看到oracle推荐的OracleCacheRowset办法,结果一试就吐血。 ? ? ? ? 应用服务器找了台IBM的服务器,4颗至强cpu,内存配的是2个G,本机带10块SCSI硬盘,做成raid5,后面用光纤接到一个SAN上面,跑oracle ? 9iAS,操作系统是w2k ? ad ? server。 ? ? ? ? 数据库是oracle工程师过来配的oracle ? 8.1.7,用两台SUN的小型机做双机,存储接的是一个EMC的阵列。 ? ? ? ? 测试的时候做了个简单的表,一个id一个name,两个字段,写了段pl/sql代码for循环了40万次灌记录。 ? ? ? ? 用了四种办法做分页:A方案,用滚动的记录集。也就是很多牛人介绍的移到last(),取记录总数,再移回来到某一行。B方案,用oracle的 OracleCacheRowset,大致原理是先取出记录集,然后灌到CacheRowset里面去,这样的话,close掉记录集也没关系了。C方 案,用oracle的同志们通用的三层select语句嵌套,按rownum分页的办法。D方案,按2001年程序员合订本上介绍的,使用rank()分 析函数来处理的办法。 ? ? ? ? 刚开始测试的时候想BT些,数据库没有做索引,没有做任何优化手段。 ? ? 测试结果: ? ? A方案折腾了半天,机器象死了一样,键盘鼠标都没用,大概20分钟左右,出来一个outofmermory。 ? ? B方案比A方案死得还要彻底,快绝望的时候也给你来个outofmermory ? ? C方案出来最快,不管从哪一页(实际上是从第几条到第几条),最多的时候就0.2s左右。 ? ? D方案并不是太理想,4000s左右,终于出来了。 ? ? ? ? 接着对库做了一些简单的优化,也就是在ID上做了索引,调了一下oracle提供的一个dbms的包(我不是做DBA的,这一块不熟) ? ? 测试结果: ? ? A方案B方案照死不误,没见一丁点好转。 ? ? C方案应该是更快一些,不过没找到更高精确度的衡量办法:) ? ? D方案倒是快了一点,最快的时候降到5s左右 ? ? ? ? ? ? (BTW:两台服务器属于备机)Top
25 楼yubing8(yubing8) 回复于 2003-09-22 01:39:57 得分 0
zxhong(红透半边天):数据量大时,再大的内存也吃不消啊 ? ? rootwuyu(wuyu):看了你评论,非常的精彩啊,不过你能不能做个更大的数据库测一下,还有就是你用的是Oracle,sql ? server怎么办啊Top
26 楼yubing8(yubing8) 回复于 2003-09-22 01:42:39 得分 0
最近在做测试时,发现加了order ? by ? 和不加order ? by速度相差太大,不知各位有没有这样的感觉,加入了order ? by之后速度会变的很慢Top
27 楼sunrain_gao(太阳雨) 回复于 2003-09-22 02:11:01 得分 0
应该如此阿 ? ? ? ? 多做了一次操作呢 ? ? Top
28 楼wsyab(瘦瘦男(炒饭) 回复于 2003-09-22 08:37:15 得分 0
直接顺序分页怎么都好说limit ? page*pagesize,(page+1)*pagesize; ? ? ? ? 到序大家做过吗???尤其mysql不支持order ? by和limit合用,~~~~~~~~~~~~~Top
29 楼starfeng(feng) 回复于 2003-09-22 09:42:32 得分 0
to ? wsyab(瘦瘦男--炒饭) ? ? ? ? ? 你用sql嵌套就是了,先查了limit的,再order ? byTop
30 楼rootwuyu(wuyu) 回复于 2003-09-22 09:55:40 得分 0
加了order ? by ? 之类肯定会慢,order ? by ? rownum会比order ? by ? 字快快,order ? by ? 到没有索引的字段会比较慢,这一点建议看csdn上前段时间有人翻译的“oracle ? sql性能优化系列”。虽然是讲oracle的,但是有些东西对informix、sybase和sqlserver也还是有参考价值的。 ? ? ? ? 至于mysql嘛,随便折腾了,实在不行你干脆把库放在内存里面得了,反正再怎么的我也不信会有人拿来跑中型应用的。 ? ? ? ? BTW:我没研究过mysql,不过据朋友说mysql的limit是先全部取到内存,再在内存里面分(小道消息,不以为证) ? ? Top
31 楼rootwuyu(wuyu) 回复于 2003-09-22 10:04:20 得分 0
“你用sql嵌套就是了,再order ? by” ? ? ? ? 应该是先order ? by了再limit吧? ? ? Top
32 楼jindunfu(海市蜃楼) 回复于 2003-09-22 10:10:51 得分 0
UP ? rootwuyu(wuyu)的敬业精神Top
33 楼yubing8(yubing8) 回复于 2003-09-22 11:03:32 得分 0
大家也讨论一下sql ? server啊,我现在用的是sql ? server数据库Top
34 楼wsyab(瘦瘦男(炒饭) 回复于 2003-09-22 11:19:33 得分 0
starfeng(feng) ? && ? rootwuyu(wuyu) ? ? ? ? ? 我不太明白你们说得意思,例如: ? ? ? ? 表test,字段id排倒序,怎么写?? ? ? 不会是取出来成另个临时字段,两个select吧 ? ? Top
35 楼BluePenguin() 回复于 2003-09-22 11:35:48 得分 0
建议你直接使用Hibernate,里面有直接分页的函数,而且是针对不同数据库做了速度优化的,非常爽!例如ORCAL采用的SQL语句与SQL ? SERVER的语句是不同的。Top
36 楼ejbcreate(小章) 回复于 2003-09-22 12:36:51 得分 0
我介绍一种不错的分页方法吧: ? ? 如果你的页面要显示20条记录,我就只是选第1条到第20条记录,然后你按‘下一页’时,我就选第21条到30条记录,如此类推。 ? ? ? ? 大概的实现方法如下(数据库为:oralce): ? ? ? ? 不要一下子把所有符合条件的记录选出来,我的意思是说:你从jsp里传几个参数, ? ? <a ? href="a.jsp?NextPage=2&RowsPage=10">下一页</a> ? ? //其中NextPage:下一页的页码;RowsPage:每页显示的记录数; ? ? 1) ? 这样你可以先计算出符合条件的记录数目: ? ? String ? lCountSql ? = ? "select ? count(*) ? as ? rowcount ? from ? ("+sSql+")"; ? ? rs ? = ? st.executeQuery(lCountSql); ? ? int ? iCounts ? = ? 0; ? ? if(rs.next()) ? ? ? ? ? ? iCounts ? = ? rs.getInt("rowcount"); ? ? ? ? 2)获得你传过来的参数,并做处理: ? ? ? ? ? ? ? ? int ? nRowPage ? = ? request.getParameter("RowsPage")==null?0:Integer.parseInt(request.getParameter("RowsPage")); ? ? ? ? ? ? ? ? int ? nPage ? ? ? ? = ? request.getParameter("NextPage")==null?0:Integer.parseInt(request.getParameter("NextPage")); ? ? ? ? ? ? ? ? if(nRowPage<1) ? nRowPage=10; ? ? ? ? ? ? ? ? int ? nPages ? = ? (iCount-1)/nRowPage+1; ? ? ? ? ? ? ? ? if ? (nPages<1) ? nPages=1; ? ? ? ? ? ? ? ? if ? (nPage>nPages) ? nPage=nPages; ? ? ? ? ? ? ? ? if ? (nPage<1) ? nPage=1; ? ? ? ? 3)进一步处理, ? ? ? ? ? ? int ? nStartRow ? = ? 0; ? ? ? ? ? ? int ? nEndRow ? = ? ? nRowPage; ? ? ? ? ? ? if(nPage>1){ ? ? ? ? ? ? ? ? nStartRow ? = ? (nPage-1)*nRowPage+1; ? ? ? ? ? ? ? ? nEndRow ? = ? nPage*nRowPage; ? ? ? ? ? ? } ? ? ? ? ? ? String ? sSql_1 ? = ? "select ? a.* ? from ? (select ? b.*,rownum ? rn ? from("+sSql+") ? b ? where ? rownum ? <= ? "+nEndRow+") ? a ? where ? rn ? >= ? "+nStartRow; ? ? ? 4)取得你想要的数据: ? ? ? rs ? = ? st.executeQuery(sSql_1); ? ? ? while(rs.next()) ? ? ? { ? ? ? ? ? // ? ? ? } ? ? ? ? ? PS:你原来的SQL语句得按一定顺序排序,所选的数据才会正确,而且要oracle9i及以上版本才支持(select ? b.*,rownum ? rn ? from("+sSql+") ? 中sSql里有order ? by ? 语句的。Top
37 楼ejbcreate(小章) 回复于 2003-09-22 12:38:00 得分 0
写错了,应该是: ? ? 我就选第21条到40条记录,如此类推。 ? ? ...Top
38 楼yubing8(yubing8) 回复于 2003-09-25 10:40:26 得分 0
ejbcreate():目前我用的是sql ? server ? 有没有好解吗?Top
39 楼yubing8(yubing8) 回复于 2003-09-25 10:42:53 得分 0
BluePenguin():你指的Hibernate是什么?可否详细说一下Top
40 楼BluePenguin() 回复于 2003-09-26 10:22:37 得分 0
Hibernate是个非常好用的O/R开源项目:http://hibernate.bluemars.net/ ? ? ? ? 最近刚有了中文论坛:http://hibernate.fankai.com/ ? ? ? ? 最新消息,Hibernate已经归入JBOSS计划,但仍然自成一个子项目,不会影响单独使用。Top
41 楼BluePenguin() 回复于 2003-09-26 10:23:44 得分 0
在查询分页代码中使用Hibernate的一大好处是,既兼顾了查询分页的性能,同时又保证了代码在不同的数据库之间的可移植性。Top
42 楼vcvj([Reside]in Fuzhou,[Gonna]be Oversea,[Depositing) 回复于 2003-09-26 10:36:15 得分 0
gzTop
43 楼whales(鲸鱼) 回复于 2003-09-26 11:17:58 得分 0
前面的大部分例子只适用于简单的的查询,对于多表的的不定条件的查询很麻烦Top
44 楼blue999star(星星要挣钱,给爸妈买房子) 回复于 2003-09-26 11:36:48 得分 0
markTop
45 楼lifejoy(山外青衫) 回复于 2003-09-26 12:00:31 得分 0
千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看Google怎么做的吧,? ? 根本就不存在如何分页的问题,如果一个结果有千万条,那跟没有结果一样是没有一样.应该是统计条数,取出,前N条进行分页,如果到地还在准备分页的话,再次取结果n,进行分页.并且在其间推荐用户进行递进式搜索,来降低信息量,才式正确的.Top
46 楼loverface(双面人) 回复于 2003-09-26 12:15:42 得分 0
学习Top
47 楼zengchangliu(程序人生) 回复于 2003-09-26 13:57:28 得分 0
我有一个方法:(对于喜欢用select ? * ? 的同行可能有用) ? ? 先检索出来,符合条件的所有 ? ? id ? ? ? (唯一标识)放在内存里 ? ? 然后根据当前页数和每页多少行纪录 ? ? 去内存中取 ? id号的当前集 ? ? 根据当前集 ? 中的某一条 ? 去数据库中检索相应的数据行 ? ? ? 这里建议使用编译预处理PrepareStatement ? ? ? 将结果放进数据类 ? (如果你的数据只有两列当然可以省略这一步) ? ? 然后把数据类添加进 ? ? ArrayList ? ? 或者HashMap ? ? ? 然后 ? 把载页面上输出 ? ? ArrayList ? ? 或者HashMap ? 的数据 ? ? 这样做,是因为只检索一列数据 ? ? 要比检索多类要快得多 ? ? 占用更少的内存。 ? ? 一次只精确定位一条纪录 ? ? 要比一次取出多条要快,这里的瓶颈在于频繁的与数据库交互,但是我们使用编译预处理可以很大程度上提高性能。Top
48 楼yubing8(yubing8) 回复于 2003-09-27 13:35:06 得分 0
lifejoy(山外青衫):分析的非常好啊,我很同意你的观点,但是还想讨论一下技术Top
49 楼Rabbit8(剑.花.烟雨.江南) 回复于 2003-09-28 10:52:08 得分 0
强烈关注!Top
50 楼seaman0916(沙漠孤鹰) 回复于 2003-10-09 00:15:52 得分 0
http://www.hnitline.com/bbs/dispbbs.asp?boardID=18&ID=807 ? ? ? ? 目前最好的分页技术 ? ? ? ? 思想确实很好,看看就知道了! ? ? Top
相关问题
请教:JSP中分页显示数据库内容的优化算法?
大家来讨论讨论 -> 最佳的数据库分页方法
100分求连接oracle数据库的自写分页代码或算法,感激不尽!
关于数据库分页
数据库算法问题请教,欢迎大家一起讨论!
大家一起来讨论一下有关数据库的分页浏览查询结果的最佳方法!
分页显示数据库的问题
sqlserver数据库分页问题,急、、、
求一个数据库的算法!
数据库基础讨论!