各大数据库分段查询技术的实现方式
程序员文章站
2022-05-22 17:17:10
...
分段查询的意思是,在查询数据时不是一次性全部将附合条件的数据都读取在内存里。一次性将数据全部查询出来,将降低查询效率,给客户端的反应会很长时间,而分段查询的意思是按照当前分页的大小,每次查询的结果就是每页显示的数量,大大提升了查询效率 例如
分段查询的意思是,在查询数据时不是一次性全部将附合条件的数据都读取在内存里。一次性将数据全部查询出来,将降低查询效率,给客户端的反应会很长时间,而分段查询的意思是按照当前分页的大小,每次查询的结果就是每页显示的数量,大大提升了查询效率 例如数据库中有100000条数据,每页20条,当点击页码的时候,只查询该页码需要显示的那20条内容,不查询别的页面的,即每次只查询20条数据 数据库 分段 查询数据库分段查询技术的实现 分段查询的意思是,在查询数据时不是一次性全部将附合条件的数据都读取在内存里。一次性将数据全部查询出来,将降低查询效率,给客户端的反应会很长时间,而分段查询的意思是按照当前分页的大小,每次查询的结果就是每页显示的数量,大大提升了查询效率 例如数据库中有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 例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下: SELECT * FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum = 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
下一篇: 集成服务入门(实验9)日志记录和邮件通知