加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql学习在MySQL中使用LIMIT进行分页的方法

发布时间:2020-12-12 02:38:38 所属栏目:MySql教程 来源:网络整理
导读:《Mysql学习在MySQL中使用LIMIT进行分页的方法》要点: 本文介绍了Mysql学习在MySQL中使用LIMIT进行分页的方法,希望对您有用。如果有疑问,可以联系我们。 本日看一个水友说他的MySQL现在变的很慢.问什么情况时.说单表超过2个G的一个MyISAM.真垃圾的回答方

《Mysql学习在MySQL中使用LIMIT进行分页的方法》要点:
本文介绍了Mysql学习在MySQL中使用LIMIT进行分页的方法,希望对您有用。如果有疑问,可以联系我们。

本日看一个水友说他的MySQL现在变的很慢.问什么情况时.说单表超过2个G的一个MyISAM.真垃圾的回答方式.MYSQL应用

??? 简单答复:换一个强劲的服务器.换服务器很管用的:)MYSQL应用

………
?????? 最终让取到慢查询:
?MYSQL应用

  SELECT * FROM pw_gbook WHERE uid='N' ORDER BY postdate DESC LIMIT N,N;
 
  SELECT * FROM pw_gbook WHERE uid='N' ORDER BY postdate DESC LIMIT N,N;

如:
???MYSQL应用

SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 1275480,20;
 
  SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 1275480,20;

??????? 看到这个语句我都吐血了(BT的PHPWIND分页啊,这个语句是PHP初学者写出来的还正常,但PHPWIND那么成熟的社区了还有这样的问题).
??????? 我这里简单说一下LIMIT的原理.这里以LIMIT N,M为基础:LIMIT首先要找查N+M行,然后从N行处,取M行.那么这样的SQL对一次查询1275500一个操作应该是一个昂贵的开销.对于LIMIT这类的优化,第一个目标便是让N变的尽可能的小或是不用.
???? 怎么才能使这个N尽可能小呢.我们能做的其实便是用相对的值,给分页一个提示.如现在我们看的是第5页,看完看想看第6页,第6页同样显示是20条记录.我们就可以想到,以这个例子为准:我们可以肯定的是第6页的日值应小于第5页的,如果第5页的最小日值为:2009-11-4,那我们就可以用:
????MYSQL应用

SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-1' ORDER BY postdate DESC LIMIT 20;
 
   SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-1' ORDER BY postdate DESC LIMIT 20;

这样来查询第6页的内容.同样对于查看第4页的内容(假设第5页的最大日期为:2009-11-3)则第4页的内容为:
?MYSQL应用

  SELECT * FROM pw_gbook WHERE uid='48' and postdate>'2009-11-3' ORDER BY postdate DESC LIMIT 20;
   SELECT * FROM pw_gbook WHERE uid='48' and postdate>'2009-11-3' ORDER BY postdate DESC LIMIT 20;

???????? 这是一个基本的思想.接下来讨论一下怎么展现的问题.MYSQL应用

???????? 再说一下这种业务的SQL怎么实现:对于分页的展示可以用多用类型.这里说三种常用的类型:MYSQL应用

第一种:显示“上一页” “下一页”这种类型MYSQL应用

???????? 这种方式相对简单也就呈现了我们看到那种SQL不思考的写法.合理的做法:MYSQL应用

???????? 第一页:
?????MYSQL应用

SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;
 
   SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;

???????? 第二页:根据第一页的postdate进行查询如:
????? SELECT * FROM pw_gbook WHERE uid='48'? and postdate<'2009-11-3'? ORDER BY postdate DESC LIMIT? 20;
?
????? SELECT * FROM pw_gbook WHERE uid='48'? and postdate<'2009-11-3'? ORDER BY postdate DESC LIMIT? 20;MYSQL应用

???????? 为什么说这个简单呢,这个不存在跳页的问题.接下来这种就存在一个跳页的问题了.MYSQL应用

第二种:显示 “ 1,2,3,4,5…”MYSQL应用

???????? 第一页: 还是以第一页的方式实现:
????????MYSQL应用

 SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;
 
     SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;

???????? 第二页:和本来一样.如果跳页,如从第二页跳到第5页,这里有一个第二页的最小日期为:2009-11-3(假设值,可以由第二页的程序查询得到),第二到第5,差2页,每页20条记录,那么就可以用:
MYSQL应用

SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-3' ORDER BY postdate DESC LIMIT 40,20;
SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-3' ORDER BY postdate DESC LIMIT 40,20;

??????? 看到这里明白为什么大型网站的分页不是一下标识出来完了,让都能点了吧.也不会给你一个框让你输入一个页跳过去了.如果跳的页面过多,也就存在N值过大的问题了.所以要想方法必免.MYSQL应用

第三种:显示 “1,5,…. 末页” 或是 “首页,<<100,101,102,103 >>末页”MYSQL应用

这里有一个特殊的一处所:MYSQL应用

《Mysql学习在MySQL中使用LIMIT进行分页的方法》是否对您有启发,欢迎查看更多与《Mysql学习在MySQL中使用LIMIT进行分页的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读