您好,欢迎访问一九零五行业门户网

各大数据库分段查询技术的实现方式

数据库分段查询技术的实现
分段查询的意思是,在查询数据时不是一次性全部将附合条件的数据都读取在内存里。一次性将数据全部查询出来,将降低查询效率,给客户端的反应会很长时间,而分段查询的意思是按照当前分页的大小,每次查询的结果就是每页显示的数量,大大提升了查询效率
例如数据库中有100000条数据,每页20条,当点击页码的时候,只查询该页码需要显示的那20条内容,不查询别的页面的,即每次只查询20条数据
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
其它类似信息

推荐信息