• Mysql DB2等数据库分页的实现


    一、Mysql的分页

      (一)、MySQL分页的实现,使用关键字:Limit

         语法:select * from tableName Limit A,B;

       注释:tableName:表名

        A:查询的起始点(如果A不写的话,默认从0开始)==》(当前页码*页面容量-1 )

        B:获得数据的条数(即每页显示的条数)===》页面容量

       注意:唯一需要注意的问题就是确保使用了索引

    例子:

    SQL查询:  从表第二条记录开始,获取两条记录
    SELECT * FROM edi_test_task order by update_dt desc Limit 2,2;

    (二)、查询原理:

      Limit A,B的意思是:  扫描满足条件的A+B行后,扔掉前面的A行,返回需要的B行结果。

        如:limit 2,2;   扫描4行后,扔掉前面的2行,返回后面的2行;

      注:对于数据量不大的时候,这样简单的写法是可以的。但是当大数据的时候,就会影响性能。

         如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。

    (三)、大数据量  提高分页效率的方法

      1、对于是可以比较的主键(索引)字段可用这种方法:

        SELECT * FROM table WHERE id BETWEEN (currentPage-1)*pageSzie   AND  currentPage*pageSzie; 

    或者:select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10;   :90000:获得起点的位置

      2、Join 连接查询

    SELECT * FROM `edi_test_task`  AS t1
    RIGHT JOIN (SELECT task_id FROM `edi_test_task` ORDER BY task_id desc LIMIT 600,9) AS t2 on t1.task_id=t2.task_id

    意思:先通过查询得到索引的Id,然后根据索引获得所需的数据。

     3、创建索引表

      建一个索引表: t (id,title,vtype) 并设置成定长,然后做分页,分页出结果再到 collect 里面去找info 。 【复合索引,如果有where字句的话,可以使用复合索引。】

  • 相关阅读:
    《程序员修炼之道:从小工到专家》阅读笔记(一)
    第十一周进度报告
    用户模板和用户场景
    第十周进度报告
    团队冲刺第十天
    团队冲刺第九天
    团队冲刺第八天
    第一阶段用户评价
    第十二周总结
    第十一周总结
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5286437.html
Copyright © 2020-2023  润新知