标题:请问数据库分段查询技术是怎么实现的?
只看楼主
myosotis
Rank: 5Rank: 5
等 级:职业侠客
帖 子:72
专家分:377
注 册:2009-8-4
结帖率:71.43%
已结贴  问题点数:100 回复次数:6 
请问数据库分段查询技术是怎么实现的?
    分段查询的意思是,在查询数据时不是一次性全部将附合条件的数据都读取在内存里。一次性将数据全部查询出来,将降低查询效率,给客户端的反应会很长时间,而分段查询的意思是按照当前分页的大小,每次查询的结果就是每页显示的数量,大大提升了查询效率
    例如数据库中有100000条数据,每页20条,当点击页码的时候,只查询该页码需要显示的那20条内容,不查询别的页面的,即每次只查询20条数据
搜索更多相关主题的帖子: 数据库 分段 技术 查询 
2009-09-08 14:02
myosotis
Rank: 5Rank: 5
等 级:职业侠客
帖 子:72
专家分:377
注 册:2009-8-4
得分:0 
没人知道吗?
自己顶一下

花自漂零水自流,一种相思,两处闲愁
2009-09-08 14:46
aspic
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:51
帖 子:2258
专家分:8050
注 册:2008-2-18
得分:35 
SQL Server

从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:

SELECT *

FROM ( SELECT Top N *

FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2

Order by 主键 asc

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

SELECT *

FROM ( SELECT TOP 20 *

FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2

Order by sys_id asc

Oralce数据库

从数据库表中第M条记录开始检索N条记录

SELECT *

FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2

where t2.r >= M

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

SELECT *

FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2

Where t2.R >= 10

MySQL数据库

My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:

以下是代码片段:

SELECT * FROM 表名称 LIMIT M,N

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

以下是代码片段:

select * from sys_option limit 10,20


 以前用ORACLE时,分页使用ROWNUM做条件就可以了,不管效率如何,反正实现起来比较容易。
  那么ACCESS如何实现分页功能呢?看了些资料说得有些复杂,要写好些代码,我想到一个好方法,来跟大家分享,也就是一个SQL语句:
 select top 15 * from YOURTABLE where ID not in(select top 15 ID from YOURTABLE order by ID desc)  order by ID desc
 稍解释一下,15呢是每页的行数,YOURTABLE是表名,ID是表中主键字段(当然你也可以用别的),我上面的SQL语句,是取出第二页(第二个15条)记录。想变页码,只要把后面的15变成相应的倍数就可以了。
  用这种方式,结合不带分页功能的DataRepeater插件,我三下五除二就写好的记事本程序。不要笑话我,我的.NET的新手,先写这个练练手。
  如果有人感兴趣,请留言,我可以把代码贴出来。

 

  请注意:

  如果取第一个15条记录,SQL语句不能这样写:

  select top 15  *  from YOURTABLE where ID not in(select top 0 ID from YOURTABLE order by ID desc)  order by ID desc

  这样写会报错。直接写成:

  select top 15  *  from YOURTABLE   order by ID desc

 

  如果要加限制条件,可以这样写:

  select top 15  *  from YOURTABLE where ID not in(select top 15 ID from YOURTABLE where  NAME='wallimn' order by ID desc) and NAME='wallimn'  order by ID desc

百度出来是一堆又一堆
2009-09-08 15:02
lengchuan
Rank: 3Rank: 3
来 自:冷川朱雀
等 级:论坛游侠
帖 子:52
专家分:123
注 册:2009-9-6
得分:35 
过来学习

和尚拈花望月,恐龙坐地成仙。
2009-09-08 15:28
myosotis
Rank: 5Rank: 5
等 级:职业侠客
帖 子:72
专家分:377
注 册:2009-8-4
得分:0 
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'  
ODBC 驱动程序不支持所需的属性

News表结构

   ID      Title
自动编号    文本

从News表中读取第100-200行的内容
语句该怎么写,是不是SQL还要配置一下?

花自漂零水自流,一种相思,两处闲愁
2009-09-09 13:28
myosotis
Rank: 5Rank: 5
等 级:职业侠客
帖 子:72
专家分:377
注 册:2009-8-4
得分:0 
不好意思,参数写错了,测试通过

但问题是:如果从第900000条开始读取20条数据呢,还是相当的慢,能不能有一个方法可以实现读第100甚至10000页的20条数据的时间和读取第一页20条数据的时间大致相同

花自漂零水自流,一种相思,两处闲愁
2009-09-09 13:44
myosotis
Rank: 5Rank: 5
等 级:职业侠客
帖 子:72
专家分:377
注 册:2009-8-4
得分:0 
哪位哥哥有有更好的办法啊?

花自漂零水自流,一种相思,两处闲愁
2009-09-10 09:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-285131-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.442273 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved