zoukankan      html  css  js  c++  java
  • 8、分页

    1、使用 limit 如:

    mysql> select * from useraccess limit 0,10;  #前十条
    mysql> select * from useraccess limit 10,10;  #再十条

    但是,因为mysql在经过从头扫描后取某部分的十条,数据量很大时,越往后速度越慢。

    策略:

    1、如博客园首页,只有200页

    2、索引表中扫,用到覆盖索引,速度优势不大

    3、方案:

    记录当前页的最大和最小ID,有2种形式:

    通过当前页的最大id,判断后取下10条

    mysql> select * from useraccess where id > 10000 limit 10;

    通过记录当前页的最小id,取上10条。(id排序速度快)

    mysql> select * from useraccess where id < 10001 order by id desc limit 10;

    a、页面只有上一页,下一页

    max_id    min_id

    下一页:select * from useraccess where id > max_id  limit 10;

    上一页:select * from useraccess where id < min_id  order by id desc limit 10;

    如天涯国关首页:

    b、如下

    到7:

    SELECT * from db WHERE id in (SELECT id from (SELECT id FROM db WHERE id>40 LIMIT 30) as N ORDER BY id desc LIMIT 10);
    [Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

    解决:再嵌套一层

    SELECT * from db WHERE id in (SELECT id FROM (SELECT id from (SELECT id FROM db WHERE id>40 LIMIT 30) as N ORDER BY id desc LIMIT 10) as pp);

    到2:

    SELECT * FROM db WHERE id in (
    SELECT id FROM 
    (
      SELECT id FROM 
      (SELECT id FROM db WHERE id < 31 ORDER BY id DESC LIMIT 20) as N   #取到 30-11 降序。
      ORDER BY id LIMIT 10    #order by 默认升序,所以取到11-20
    ) as pp
    
                      );

    注意:在取30-11时有两种可能,一是不用降序取,取到1-20,但这是靠近开始页,数据少,如果当前页靠后,那么数据就多了;另外就是按降序取30-11这样数据不多

    渐变 --> 突变
  • 相关阅读:
    将方法作为方法的参数
    远程桌面无响应解决方案(转)
    QQ通信机制(转)
    电脑管家禁止程序修改文档后如何恢复权限
    SQL Sever——远程过程调用失败(0x800706be)
    JavaScript学习笔记之JavaScript调用C#编写的COM组件
    kendoUI 免费部分开发部分经验。
    mongoDB连接信息及生成对应的collection生成代码
    写个匹配某段html dom代码某属性的正则匹配方法
    微信获取用户支付共享地址
  • 原文地址:https://www.cnblogs.com/lybpy/p/8253535.html
Copyright © 2011-2022 走看看