Oracle、MySql、SQLServer 数据分页查询

Oracle、MySql、SQLServer
数据分页查询

摘自:http://www.cnblogs.com/wangyong/p/3396333.html

近简单的对oracle,mysql,sqlserver2005的多少分页查询作了研究,把个别的查询的报告句贴出供大家学习…..

       (一)、** mysql的分页查询**

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

Oracle 1

/*

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

* firstIndex:其实的索引

* pageSize:每页显示的记录数

*/

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

Oracle 2

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

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

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

Oracle 4

        mysql的分页查询就这么简单……

  (二)、sqlserver2005的分页查询

   
在sqlserver2005之前一直靠top关键字来实现分页查询,不过效率低,在sqlserver2005及其之后的本都下row_number()解析函数来完成分页查询,效率来矣特别可怜的增强,不过sql语句比较复杂,下面给有分页查询的通式:

Oracle 5

/*

* 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;

Oracle 6

 下面看截图,每页显示20漫漫记录数:

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

Oracle 7

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

Oracle 8

    知道了sqlserver中的row_number函数,分页也即概括了…..

  (三)、oracle分页查询

   
接下来要说说oracle的分页查询,oracle的分页查询艺术相对来说要多碰,ROWNUM、row_number(),今天要用点滴种效率稍好的分页查询语句。

    ①ROWNUM询问分页通式:

Oracle 9

/*

* firstIndex:起始索引

* pageSize:每页显示的数量

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

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

Oracle 10

以下截图是为这种办法展开的查询语句:

                                                          查询(1-21)这20条记录*****(没有ID=6的笔录,所以查询到的绝老ID为21)
Oracle 11

                                                    
  查询(22-41)这20条记录*****(没有ID=6的记录,所以开询问及之ID为22,以及最充分ID为41)

Oracle 12

 

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

Oracle 13

 /*

 * 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

Oracle 14

 以下截图是动row_number()方式的分页查询功能:

                                                         
查询(1-21)这20条记录*****(没有ID=6的笔录,所以查询到的最为特别ID为21)
Oracle 15

                                                   
查询(22-41)这20条记录*****(没有ID=6的笔录,所以开询问及之ID为22,以及极老ID为41)

Oracle 16

      对于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_numberOracle()效果会生好(未测试)

相关文章