有关MySQL分页
PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的陈述,有许多亮点,本文是在原文基础上的进一步延伸。
首要看一下分页的基本原理:
mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G
***************** 1. row **************
id: 1
select_type: SIMPLE
table: message
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10020
Extra:
1 row in set (0.00 sec)
limit 10000,20的意思扫描满意条件的10020行,丢掉前面的10000行,回来最终的20行,问题就在这里,若是是limit 100000,100,需求扫描100100行,在一个高并发的使用里,每次查询需求扫描超越10W行,功能必定大打折扣。文中还提到limit n功能是没问题的,由于只扫描n行。
文中提到一种”clue”的做法,给翻页供给一些”头绪”,比方仍是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当时是第10页,当时页条目id最大的是9527,最小的是9500,若是咱们只供给”上一页”、”下一页”这样的跳转(不供给到第N页的跳转),那么在处置”上一页”的时分SQL句子可所以:
SELECT * FROM message WHERE id > 9527 ORDER BY idASC LIMIT 20;
处置”下一页”的时分SQL句子可所以:
SELECT * FROM message WHERE id < 9500 ORDER BY idDESC LIMIT 20;
不论翻多少页,每次查询只扫描20行。
缺陷是只能供给”上一页”、”下一页”的链接办法,可是咱们的产物司理十分喜欢”<上一页 1 2 3 4 5 6 7 8 9 下一页>”这样的链接办法,怎么办呢?
若是LIMIT m,n不可避免的话,要优化功率,只要尽可能的让m小一下,咱们扩大前面的”clue”做法,仍是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当时是第10页,当时页条目id最大的是9527,最小的是9500,比方要跳到第8页,我看的SQL句子可以这样写:
SELECT * FROM message WHERE id > 9527 ORDER BY idASC LIMIT 20,20;
跳转到第13页:
SELECT * FROM message WHERE id < 9500 ORDER BY idDESC LIMIT 40,20;
原理仍是一样,记载住当时页id的最大值和最小值,核算跳转页面和当时页相对偏移,由于页面附近,这个偏移量不会很大,这样的话m值相对较小,大大削减扫描的行数。其实传统的limit m,n,相对的偏移一直是第一页,这样的话越翻到后边,功率越差,而上面给出的办法就没有这样的问题。
注重SQL句子里面的ASC和DESC,若是是ASC取出来的成果,显现的时分记住倒置一下。
已在60W数据总量的表中测验,作用十分显着。
- 1Zend2.0的MVC完整过程。
- 2 企业四网合一网站升级版3
- 3网站建设之后,维护才是重中之重
- 4企业四网合一网站升级版1
- 5 数据库操作基类
- 6网站建设之搜索功能强化升级标准
- 7玩具租赁商城系统需求6
- 8网站关键字的确定
- 9公司网站建成后应该做些什么?
- 10专业级计算引入到普通PC的一款免费操作系统
- 11优质的网站建设方案对网站制作的重要性
- 12玩具租赁商城系统需求1
- 13P2P网贷发展历程
- 14ecshop的数据字典
- 15GAE上搭建PHP环境并开启URL
- 16HTML5的呈现代表着新一波的Web顺序办法
- 17HTTPS(安全HTTP)和SSL/TLS(安全套接层/传输层安全)
- 18租赁网站功能介绍
- 19404过错跳转到一个页面,咱们取名叫:missing404.php
- 20房地产行业微信营销方案3
- 21企业为什么偏爱需要资深的网站设计企业做官方网站呢?
- 22企业站针对用户的优化
- 23玩具租赁商城系统需求5
- 24企业做网站有没有用?
- 25网站备案所需材料
- 26浏览器开发工具的秘密
- 27PHP性能优化大全
- 28一篇HTML5分裂成两标准
- 29PhoneGap新手总是需要一些基础问题的解答
- 30评估企业站做的好坏的方法
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼