分页查询

 

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

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

转载于:https://www.cnblogs.com/BlueStarWei/p/9426413.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值