zoukankan      html  css  js  c++  java
  • 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字句的话,可以使用复合索引。】

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5286437.html
Copyright © 2011-2022 走看看