• 分页查询


         分页查询主要有两种形式:逻辑分页、物理分页。

    1.逻辑分页

        1.1 含义:一次性查出所有的数据,然后在代码逻辑中进行处理,根据页码和展示的数量决定具体显示哪几条数据

        1.2 优点:查询效率快【直接从内存中读取】

        1.3 局限性: 占用大量内存,降低服务器的性能

    2. 物理分页【推荐使用

        2.1 含义:根据数据库提供的分页功能查询出需要显示的具体数据【即:只查询当前页面显示的数据

        2.2 优点: 不影响服务器性能

        2.3 局限性:  查询速率相对较慢【每次翻页都需要与数据库进行交互

        2.4 Oracle实现:

    SELECT * FROM (
      SELECT ROWNUM AS NUM, T.* FROM (
        SELECT * FROM T_USER ORDER BY ID ) T
       WHERE ROWNUM <= endIndex)
    WHERE NUM > startIndex

            2.4.1 原理: 三层嵌套查询 + ROWNUM

            2.4.2 三层嵌套查询的作用及原因:(由内向外)

     

    作用

    原因

    第一层

    排序

    ORDER BY不能放在WHERE前面

    第二层

    取endindex条记录,并将ROWNUM变为实际显示列

    ROWNUM为隐藏列,不支持 >或 >=

    第三层

    截取需要的子集

    获取最终结果集

        2.5 MySql实现

    SELECT * FROM actor ORDER BY first_name LIMIT startIndex,pageSize

    3. 补充

        3.1 子查询效率低,尽量减少子查询的使用

              例如:Oracle分页可以做以下优化

            3.1.1 不需要排序,查询第一页

    SELECT * FROM T_USER ROWNUM < endIndex

            3.1.2 不需要排序,查询后面几页

    SELECT * FROM (
      SELECT ROWNUM AS NUM, T.* FROM T_USER T WHERE ROWNUM < endIndex)
    WHERE NUM > startIndex

            3.1.3 需要排序,查询第一页

    SELECT * FROM (
       SELECT * FROM T_USER ORDER BY ID ) 
    WHERE ROWNUM <= endIndex

            3.1.4 需要排序,查询后面几页

    SELECT * FROM (
      SELECT ROWNUM AS NUM, T.* FROM (
        SELECT * FROM T_USER ORDER BY ID ) T
      WHERE ROWNUM <= endIndex)
    WHERE NUM > startIndex

        3.2 推荐使用物理查询的原因:

            3.2.1 逻辑分页查询一次性将数据全部读到内存中,占用大量的系统资源(尤其是数据很多的时候),影响其他软件的使用,降低服务器的性能

            3.2.2 物理分页查询只是在翻页的时候速率较慢,但是翻页操作使用并不频繁,相对于逻辑查询降低服务器性能,该影响基本可以忽略

  • 相关阅读:
    Ubuntu 16.04中VirtualBox 5.1使用U盘/USB设备的方法
    VirtualBox中的虚拟机在Ubuntu 下无法启动之问题解决
    XX-net 部署网络
    Ubuntu 16.04安装Git及GUI客户端
    Ubuntu dns
    rapidjson
    ubuntu14.04 安装 搜狗输入法
    Ubuntu中解决机箱前置耳机没声音
    C++调试帮助
    ubuntu16.04安装virtualbox
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/9426413.html
Copyright © 2020-2023  润新知