php MySQL与分页效率


Posted in PHP onJune 04, 2008

 
最基本的分页方式:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:
举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10

子查询的分页方式:

随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT * FROM articles WHERE category_id = 123 AND id >= (
    SELECT id FROM articles ORDER BY id LIMIT 10000, 1
) LIMIT 10

----------------------------------------

实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

PHP 相关文章推荐
使用PHP提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
php获取远程文件大小
Oct 20 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
PHP代码重构方法漫谈
Apr 17 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
PDO::inTransaction讲解
Jan 28 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
php mysql数据库操作分页类
Jun 04 #PHP
php mysql数据库操作类
Jun 04 #PHP
CodeIgniter php mvc框架 中国网站
May 26 #PHP
五个PHP程序员工具
May 26 #PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 #PHP
JS实现php的伪分页
May 25 #PHP
php中iconv函数使用方法
May 24 #PHP
You might like
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
vue中实现动态生成二维码的方法
2020/02/21 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
基于Python的PIL库学习详解
2019/05/10 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
岗位廉洁从政承诺书
2014/03/27 职场文书
消防标语大全
2014/06/07 职场文书
节能减耗标语
2014/06/21 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
MySQL一些常用高级SQL语句
2021/07/03 MySQL
Python多个MP4合成视频的实现方法
2021/07/16 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js