CNDEV
CNDEV.ORG
当前在线
论坛
CBD
程序员情感CBD
程序员见面交流会
CBD开发区
Java/J2ME
.NET/C#
数据库
Delphi/BCB
Visual C
其它
修真养身
中国象棋
纪念日
谈钱太俗,还是投机吧
听音乐
iCosta
资源共享
一隅
好文共赏
看电影看美剧
待定
狗屎
雪域召唤
工作流
专业显摆区
语录
情感
批评与自我批评
爱情故事
发牢骚
看三点区
游戏
CNDEV-CS/WOW
浩宇长空
生活
家有XPH
我爱学英语
美食天地ORG
半调子体育迷
观澳园友邻
搞笑奇文
拍照片
我读书我存在
论坛系统
超级垃圾站
系统建议及BUG
系统测试
中国开发网
: 论坛:
程序员情感CBD
: 贴子 183305
疯子张
:
。
[阅读: 567] 2005-08-26 07:01:59
<空>
相关信息:
[技术贴]问题: 怎么做分页?
(50字)
(
holly
[842]
2005-08-26 03:19
)
这个跟所用的数据库息息相关的吧
(空) (
小东
[651]
2005-08-26 03:22
)
相关也请说
(空) (
holly
[637]
2005-08-26 03:26
)
思路是一样的,相关的是实现。
(空) (
老玉米
[693]
2005-08-26 03:28
)
我一般是用SQL完成,如果oracle就简单点,有rownum可以用。
(空) (
dead_lee
[824]
2005-08-26 03:22
)
rownum好像只是针对是表物理顺序的吧,不同的order by,它就没有用了吧?好像db2的olap sql语法有这个序号。。。
(34字)
(
haitao
[1066]
2005-08-26 03:36
)
orale里可以用row_number() over (order by ....)
(空) (
tweety
[1052]
2005-08-26 03:55
)
看来还是oracle最早关心互联网的应用需求啊
(59字)
(
haitao
[782]
2005-08-26 04:01
)
服务器端无状态,每次根据客户端提交的分页信息生成动态查询语句。
(空) (
老玉米
[867]
2005-08-26 03:25
)
比如一个结果是 200K 行的查询, 每次查询都做一次完整的然后再筛选? 是不是开销太大?
(空) (
holly
[780]
2005-08-26 03:28
)
每次只查你需要的行数。。。。这种方案1
(104字)
(
老玉米
[789]
2005-08-26 03:33
)
就当是 google 这样的查询
(空) (
holly
[701]
2005-08-26 03:35
)
不知道google怎么做的,我怀疑他是根据命中的条目的数量,用的不同算法。
(78字)
(
老玉米
[769]
2005-08-26 03:39
)
我不是要你说 google 怎么做.
(54字)
(
holly
[676]
2005-08-26 03:42
)
应用不同,环境不同,方案也不一样。没有这些前提,只说如果做分页,意义不大。
(空) (
老玉米
[765]
2005-08-26 03:36
)
就当是 google 这样的查询 (空) (holly [1] 今天 11:35)
(空) (
holly
[701]
2005-08-26 03:37
)
不了解google,不过可以肯定他用的不是关系数据库。。。索引查询的方案都和你要讨论的完全不同。
(空) (
老玉米
[753]
2005-08-26 03:40
)
参见上面
(空) (
holly
[661]
2005-08-26 03:43
)
只选id,读到该页所有id,然后再查详细信息
(空) (
ahfei
[673]
2005-08-26 03:30
)
怎么读到 "该页所有 id"?
(空) (
holly
[731]
2005-08-26 03:31
)
这跟数据库有关啊,有的数据库可以简单些,你看疯子说的
(空) (
ahfei
[662]
2005-08-26 03:33
)
要有一个唯一索引,用top(SQL SERVER)或first(informix)之类的检索出N条记录,同时将第N条记录的索引积下,再查的时候,where子句中增加这个条件。
(空) (
疯子张
[1117]
2005-08-26 03:30
)
是不是拿这个索引当记录号用的意思?
(空) (
holly
[685]
2005-08-26 03:34
)
还不同于记录号,因为索引值可以不是连续的。
(空) (
疯子张
[632]
2005-08-26 03:36
)
OK, 我表达得严格点: 是不是就是拿这个当作一个有序增加的值来用?
(78字)
(
holly
[620]
2005-08-26 03:40
)
我以前作的论坛就是这样的,每个贴子都有一个自动递增ID
(45字)
(
haitao
[743]
2005-08-26 03:45
)
如果没有top,rownum之类的方法,就要自己移动record cursor
(空) (
ahfei
[821]
2005-08-26 03:46
)
如果sql只支持top(first)而不支持startat,以前有过很具体的讨论了
(29字)
(
haitao
[919]
2005-08-26 03:38
)
要有一个唯一索引,用top(SQL SERVER)或first(informix)之类的检索出N条记录,同时将第N条记录的索引记下,再查的时候,where子句中增加这个条件。
(空) (
疯子张
[929]
2005-08-26 03:30
)
要求数据库系统提供select startat x top n fieldlist from ... 的语法
(59字)
(
haitao
[884]
2005-08-26 03:34
)
我没这个需求. 我只是想看看大家有什么好的解决办法
(空) (
holly
[709]
2005-08-26 03:37
)
FB 2.0开始满足你的需求了
(空) (
小东
[768]
2005-08-26 04:15
)
也要看你是什么样的方案
(42字)
(
pigprince
[731]
2005-08-26 03:35
)
就当是 google 这样的查询 (空) (holly [1] 今天 11:35)
(空) (
holly
[633]
2005-08-26 03:38
)
google比较特别。。。1、一般只翻前几页;2、服务器多,说不定在一定时间段内保留了结果;3、完全可能自己作一个类似的数据库系统,实现了startat/top
(231字)
(
haitao
[863]
2005-08-26 03:42
)
请看上面我回老玉米的帖子
(31字)
(
holly
[716]
2005-08-26 03:45
)
有top的做法应该算是有定论了的
(12字)
(
haitao
[819]
2005-08-26 03:48
)
三次? 我怎么觉得 2 次就够了?
(16字)
(
holly
[597]
2005-08-26 03:55
)
不过开销还是非常大的
(空) (
holly
[698]
2005-08-26 03:56
)
如果是翻前几页,额外的开销应该很小的
(49字)
(
haitao
[642]
2005-08-26 03:58
)
不要如果, 讨论通用方案
(空) (
holly
[665]
2005-08-26 04:01
)
很早很早以前
(43字)
(
JoJo
[722]
2005-08-26 04:04
)
游标,特别是服务器游标
(145字)
(
JoJo
[748]
2005-08-26 03:51
)
总算有人提服务器游标了
(22字)
(
holly
[693]
2005-08-26 03:54
)
后一种不是SQL游标
(64字)
(
JoJo
[787]
2005-08-26 03:57
)
如果你要通用解,就是游标+临时表
(47字)
(
JoJo
[762]
2005-08-26 04:03
)
嘿嘿
(7字)
(
holly
[589]
2005-08-26 04:05
)
我现在没有装RDBMS,没法给出分析数据
(71字)
(
JoJo
[707]
2005-08-26 04:11
)
select * from table 来用游标,和 select top 100 from table where ID>CurrentID 比较
(17字)
(
pcplayer
[1283]
2005-08-26 04:08
)
好像谁说过的,游标要多占用资源一些
(19字)
(
小东
[715]
2005-08-26 04:13
)
不是内存占用大,是容易产生锁
(空) (
JoJo
[773]
2005-08-26 04:17
)
锁也是资源
(空) (
小东
[496]
2005-08-26 04:21
)
如果没有任何查询条件的话,内存消耗是一样的
(31字)
(
JoJo
[613]
2005-08-26 04:15
)
当然是用了服务器游标的内存开销大
(空) (
holly
[513]
2005-08-26 04:25
)
不明显吧?反正当时没检查出来
(20字)
(
JoJo
[623]
2005-08-26 04:28
)
游标要尽量避免
(487字)
(
DeepBlue
[772]
2005-08-26 06:45
)
。
(空) (
疯子张
[566]
2005-08-26 07:01
)
你说的那是哪年的事情了?
(193字)
(
JoJo
[671]
2005-08-26 07:34
)
你别跟Top比阿
(空) (
DeepBlue
[658]
2005-08-26 07:36
)
我觉得First, TOP之类性能损失很严重,游标更不可取,集合操作有些类似First, Top之类的,也不太好。是否考虑第一次查询返回所有记录的主键,存入临时表;根据需要从这个临……
(空) (
DeepBlue
[713]
2005-08-26 06:27
)
查一个所有记录的主键的临时表的代价跟查原始表的代价有什么区别?
(空) (
holly
[797]
2005-08-26 06:48
)
代价区别在于磁盘IO只需要开销在索引上,不需要真的访问数据块
(空) (
DeepBlue
[634]
2005-08-26 07:25
)
这个在没有访问数据的前提下不明显. 一般的 DBMS 实现中索引与数据都是分别存放的.
(23字)
(
holly
[504]
2005-08-26 08:15
)
临时表或子查询应该都是以id作为除排序字段外唯一的内容字段的
(16字)
(
haitao
[965]
2005-08-26 06:50
)
?
(3字)
(
DeepBlue
[476]
2005-08-26 07:27
)
临时表或子查询 的字段越精简,开销越小嘛
(104字)
(
haitao
[811]
2005-08-26 07:50
)
数据库系统自动为每次查询的结果集的每行增加一个本结果集内的顺序号字段,开销大吗?
(182字)
(
haitao
[910]
2005-08-26 06:53
)
你这要求,如果你来写会怎么写效率最高呢?
(空) (
DeepBlue
[564]
2005-08-26 07:29
)
我是指你作为数据库厂商的话,如何实现呢
(空) (
DeepBlue
[544]
2005-08-26 07:34
)
生成结果记录集时,多预留一个int字段,生成完毕后,循环加上递增的序号
(98字)
(
haitao
[888]
2005-08-26 07:35
)
你说的这个和oracle的伪列rownum有什么区别?
(空) (
疯子张
[919]
2005-08-26 07:43
)
这不就是伪列吗?Oracle很早就有了
(32字)
(
JoJo
[747]
2005-08-26 07:48
)
要的就是能公开给大家用的。。。有了它,分页根本不是什么问题了
(75字)
(
haitao
[519]
2005-08-26 07:56
)
记住, 排序是开销最大的操作. 一般是不排序的
(空) (
holly
[561]
2005-08-26 08:17
)
用户的sql就是有orderby的,怎么能不排序呢??
(空) (
haitao
[801]
2005-08-26 08:33
)
这种做法多用户的时候会很麻烦,无法保证数据一致性
(216字)
(
JoJo
[687]
2005-08-26 07:06
)
翻页的时候,ID+原有的查询条件是否满足需求?在最后一页补查翻页期间产生的新的符合条件的纪录
(空) (
DeepBlue
[711]
2005-08-26 07:33
)
这个查询开销就能抵销掉大半临时表所带来的好处。
(15字)
(
JoJo
[682]
2005-08-26 07:38
)
这可是主键/唯一索引+附加条件查询,开销非常小的
(空) (
DeepBlue
[793]
2005-08-26 08:12
)
如果这个ID被另外一个用户删掉的话会有什么结果?
(空) (
fogbound
[675]
2005-08-26 07:45
)
没问题啊,不会返回这行的数据
(空) (
DeepBlue
[620]
2005-08-26 08:15
)
想当年给公司做SP网站的时候分页这个问题就困扰了我好久!
(30字)
(
fogbound
[631]
2005-08-26 07:35
)
那个时候刚毕业不久,累是累点,不过感觉好像没有现在想得这么多!
(空) (
fogbound
[615]
2005-08-26 07:40
)
我也顶! 我居然在技术贴里面留言了!
(空) (
fogbound
[638]
2010-01-15 06:28
)
我靠,好大的树,以前没看到,到底结论是啥?
(空) (
有狐
[423]
2010-01-04 20:30
)
沒啥特別的結論, 八仙過海唄...
(27字)
(
dead_lee
[474]
2010-01-04 22:39
)
最后大牛选择了 for i=1 to end step = 20
(空) (
oyjt
[504]
2010-01-05 01:19
)
来mark一下,学习牛们的经验
(空) (
valueline
[487]
2010-01-15 02:32
)
大牛是问2喜的. 本坛每页 20个主贴.但是2喜很不屑的没有回答
(空) (
oyjt
[467]
2010-01-15 05:46
)
这个“屑”字我总打不出来,刚查了下,原来是xie\,我一直打xiao-
(空) (
风无影
[486]
2010-01-15 06:01
)
谁在挖坟?
(空) (
JoJo
[424]
2010-01-15 06:07
)
欢迎光临本社区,您还没有登录,不能发贴子。请在
这里登录