zoukankan      html  css  js  c++  java
  • 数据库分页

    MySql分页

    --page:当前页   pageNum:每页显示条数   
    select  * from goods e  limit 2,2;
    select * from  goods e limit (page-1)*pageNum,pageNum;--MySql分页公式,按照公式来,取值前开后闭:<   <=
    

    Oracle分页  

    1. 第一种

    --公式
    --page:当前页   pageNum:每页显示条数  
    select *
      from (select stu.*, rownum rn
              from (select * from stu) stu
             where rownum <= (page-1)*pageNum+pageNum)
     where rn > (page-1)*pageNum; 
    
    --具体例子
    select *
      from (select stu.*, rownum rn
              from (select * from stu) stu
             where rownum <= 3)
     where rn >= 1;
    

    2.第二种

    --公式
    --page:当前页   pageNum:每页显示条数  
     select *
       from (select stu.*, rownum rn from (select * from stu) stu)
      where rn > (page - 1) * pageNum
        and rn <= (page - 1) * pageNum + pageNum); --网上这里用Between闭区间,我觉得不合适这个公式,这个公式要前开后闭
    
    --具体例子
    select *
      from (select stu.*, rownum rn from (select * from stu) stu)
     where rn <= 3
       and rn > 0;  

    对比这两种写法,绝大多数的情况下,第一种oracle分页的效率比第二种高得多。对于Oracle推荐第一种

    这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 3就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。而第二个查询语句,由于查询条件rn <= 3 and rn > 0

    是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二种查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

      

  • 相关阅读:
    springMVC上传文件简单案例
    java监听器、定时器的使用
    javaweb的web.xml配置说明,初始化过程
    Linux下解决高并发socket最大连接数限制,tcp默认1024个连接
    tsung压力测试——Tsung测试统计报告说明【转】
    tsung压力测试——tcp测试tsung.xml配置模版说明
    tsung压力测试——安装
    Java同步锁——lock与synchronized 的区别【转】
    Java集合——HashMap,HashTable,ConcurrentHashMap区别
    SpringMVC源码情操陶冶-FreeMarker之web配置
  • 原文地址:https://www.cnblogs.com/xiaohu666/p/12708775.html
Copyright © 2011-2022 走看看