MySQL分页性能问题,Limit性能问题求解决!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL分页性能问题,Limit性能问题求解决!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2506字,纯文字阅读大概需要4分钟。
内容图文
![MySQL分页性能问题,Limit性能问题求解决!](/upload/InfoBanner/zyjiaocheng/235/177eb260d9c240a99065145a38471010.jpg)
SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 100,100;
上述SQL语句性能没有任何问题。
但是,如果当offset便宜了过大的情况就会出现性能瓶颈。 如:
SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 159000,100;
若要解决Limit offset过大的时候,可以采用子查询的方法进行分页。 如:
SELECT pid,author,hash,dateline FROM posts ORDER BY pid ASC LIMIT 159000,100;
等价于:
SELECT pid,author,hash,dateline FROM posts WHERE pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;
此时的性能是纯粹LIMIT 159000,100 的几倍至高。
但是问题又来了,子查询又必须是数据连续,所以无法加入WHERE查询条件,如:
SELECT tid,pid,author,hash,dateline FROM posts WHERE tid=10 AND pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;
此时的结果并非我想要的结果。
所以求高性能解决LIMIT分页的方法。 在线等。
============================ PS: pid 为主键
回复内容:
众所周知,Mysql分页就要用到Limit进行分页,数据量/分页数小的时候Limit性能是可想而知的。 如:
SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 100,100;
上述SQL语句性能没有任何问题。
但是,如果当offset便宜了过大的情况就会出现性能瓶颈。 如:
SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 159000,100;
若要解决Limit offset过大的时候,可以采用子查询的方法进行分页。 如:
SELECT pid,author,hash,dateline FROM posts ORDER BY pid ASC LIMIT 159000,100;
等价于:
SELECT pid,author,hash,dateline FROM posts WHERE pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;
此时的性能是纯粹LIMIT 159000,100 的几倍至高。
但是问题又来了,子查询又必须是数据连续,所以无法加入WHERE查询条件,如:
SELECT tid,pid,author,hash,dateline FROM posts WHERE tid=10 AND pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;
此时的结果并非我想要的结果。
所以求高性能解决LIMIT分页的方法。 在线等。
============================ PS: pid 为主键
这篇PDF可以解决你的问题
Efficient Pagination Using MySQL
你的pid是啥,不是主键吗?最后一条 pid=10 AND pid>=(SELECT pid FROM posts LIMIT 159000,1) 有能同时成立吗
外面有的条件,子查询里面照样写就行了,和子查询的条件相同,order by相同,比如: select * from user where sex=2 and issingle=0 and id<=(select id from user where sex=2 and issingle=0 order by id desc limit 1000000,1) order by id desc limit 10";
ALTER TABLE `posts ` ADD INDEX `tid_pid` USING BTREE (`tid`,`pid`) comment '';
内容总结
以上是互联网集市为您收集整理的MySQL分页性能问题,Limit性能问题求解决!全部内容,希望文章能够帮你解决MySQL分页性能问题,Limit性能问题求解决!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。