Oracle, MySql, SQLServer data paging query

  Recently, I simply researched the data paging query of oracle, mysql, and sqlserver2005, and posted their respective query statements for everyone to learn.....

       (1),  mysql paging query

        The paging query of mysql is the simplest, and the query can be realized with the help of the keyword limit. The general query statement is as follows:

 
/*

* sql: It can be a single-table query statement or a multi-table joint query statement

* firstIndex: the actual index

* pageSize: the number of records displayed per page

*/

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

As shown in the screenshot below, the number of records displayed per page is 20:

                                                  Query (1-20) these 20 records

                                             Query (21-40) these 20 records

        MySQL's paging query is so simple...

  (2), paging query of sqlserver2005

    Before sqlserver2005, the top keyword has been used to implement paging query, but the efficiency is low. In sqlserver2005 and later versions, the row_number() parsing function is used to complete paging query, and the efficiency has been greatly improved, but the sql statement is more complicated. The general formula for paging query is given below:

 
/*
* firstIndex: starting index


* pageSize: The number displayed on each page
 
* orderColumn: Sorted field name
 
* sql: It can be a simple single-table query statement, or a complex multi-table joint query statement
 
*/
 
select  top  pageSize o. *  from ( select row_number( ) over ( order  by  orderColumn ) as rownumber, *  from ( sql ) as o where rownumber > firstIndex ;
 

 See the screenshot below, showing 20 records per page:

                                                             Query (1-20) these 20 records

                                                         Query (21-40) these 20 records

    Knowing the row_number function in sqlserver, paging is simple.....

  (3), oracle paging query

    接下来重点说说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()效果会很好(未测试)

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326358799&siteId=291194637