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 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
php加密解密字符串示例
Oct 13 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 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
神族 Protoss 历史背景
2020/03/14 星际争霸
基于mysql的论坛(3)
2006/10/09 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
关于Laravel-admin的基础用法总结和自定义model详解
2019/10/08 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
python多进程操作实例
2014/11/21 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
Django中的静态文件管理过程解析
2019/08/01 Python
opencv实现简单人脸识别
2021/02/19 Python
Python FFT合成波形的实例
2019/12/04 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python 防止死锁的方法
2020/07/29 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
干部选拔任用方案
2014/05/26 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
寒山寺导游词
2015/02/03 职场文书
导游词之临安白水涧
2019/11/05 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL