• 分页查询


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

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

  • 相关阅读:
    JavaScript与C# Windows应用程序交互
    SVG与CSS的特殊性
    Flash 仪表控件 FusionGadgets【转】
    如何获取Windows服务对应程序的所在目录
    记录几个CSS样式
    使用网络调试助手时出现 connect() failed 错误
    使用xml配置文件配置DataGridView的列信息
    javascript解析json
    iPhone开发笔记
    (转)C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/9426413.html
Copyright © 2020-2023  润新知