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.ini中的php-5.2.0配置指令详解
Mar 27 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
PHP中PDO的错误处理
Sep 04 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php微信公众号开发之快递查询
Oct 20 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
图书管理程序(一)
2006/10/09 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2014年化验室工作总结
2014/11/21 职场文书
党员个人承诺书
2015/04/27 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
asyncio异步编程之Task对象详解
2022/03/13 Python