Oracle、MySql、SQLServer 数据分页查询

         最近简单的对oracle,mysql,sqlserver2005的数据分页查询做了研究,把各自的查询的语句贴出来供你们学习.....mysql

       (一)、 mysql的分页查询sql

        mysql的分页查询是最简单的,借助关键字limit便可实现查询,查询语句通式:oracle

/*

* sql:能够是单表的查询语句,也能够是多表的联合查询语句

* firstIndex:其实的索引

* pageSize:每页显示的记录数

*/

select o.* from (sql) o limit firstIndex,pageSize

以下面的截图,每页显示的记录数为20:函数

                                                  查询(1-20)这20条记录
sqlserver

                                             查询(21-40)这20条记录学习

        mysql的分页查询就这么简单......测试

  (二)、sqlserver2005的分页查询大数据

    在sqlserver2005以前一直借助top关键字来实现分页查询,不过效率低,在sqlserver2005及其以后的版本都使用row_number()解析函数来完成分页查询,效率有了很大的提升,不过sql语句比较复杂,下面给出分页查询的通式:spa

/*
* firstIndex:起始索引


* pageSize:每页显示的数量
* orderColumn:排序的字段名
* sql:能够是简单的单表查询语句,也能够是复杂的多表联合查询语句
*/
select
top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(sql) as o where rownumber>firstIndex;

 下面看截图,每页显示20条记录数:3d

                                                             查询(1-20)这20条记录

                                                         查询(21-40)这20条记录

    知道了sqlserver中的row_number函数,分页也就简单了.....

  (三)、oracle分页查询

    接下来重点说说oracle的分页查询,oracle的分页查询方法相对来讲要多点,ROWNUM、row_number(),今天主要将两种效率稍好的分页查询语句。

    ①ROWNUM查询分页通式:

/* 
* firstIndex:起始索引

* pageSize:每页显示的数量

* sql:能够是简单的单表查询语句,也能够是复杂的多表联合查询语句
*/

select
* from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) where rn>firstIndex

如下截图是以这种方式进行的查询语句:

                                                          查询(1-21)这20条记录*****(没有ID=6的记录,因此查询到的最大ID为21)

                                                       查询(22-41)这20条记录*****(没有ID=6的记录,因此开始查询到的ID为22,以及最大ID为41)

 

    ②row_number()解析函数分页查询通式:

 /*

* firstIndex:起始索引

* pageSize:每页显示的数量
* orderColumn:排序的字段名

* sql:能够是简单的单表查询语句,也能够是复杂的多表联合查询语句

*/

select
* from(select * from(select t.*,row_number() over(order by orderColumn) as rownumber from(sql) t) p where p.rownumber>firstIndex) where rownum<=pageSize

 如下截图是使用row_number()方式的分页查询效果:

                                                          查询(1-21)这20条记录*****(没有ID=6的记录,因此查询到的最大ID为21)

                                                    查询(22-41)这20条记录*****(没有ID=6的记录,因此开始查询到的ID为22,以及最大ID为41)

      对于oracle的分页查询,特意选出这两种实现方式是由于这二者各有千秋

     首先, 咱们知道在ROWNUM查询的方式中,在第二层的sql语句中有个"where ROWNUM<firstIndex+pageSize",根据oracle的原则,第二层查询语句会嵌入到最内层中进行查询,也就是说,最开始执行的查询语句相似于:select * from wyuse where rownum<(firstIndex+pageSize) order by id asc,从数据表中查询出(firstIndex+pageSize)条记录,因此若是这个值很小的话,效率会很好,若是对于大数据量的表单,这个值若是是上千,好比:select * from wyuse where rownum<(5000) order by id asc,这样一开始会选出5000条记录,效率天然会慢不少....

     不过,相对于ROWNUM,row_number()方式可能经过简化能够少一层嵌套,不过貌似对于大数量的查询,效率也高不到哪里去.....不过,对于大数量若是为表创建索引再结合row_number()效果会很好(未测试)

相关文章
相关标签/搜索