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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
php模板之Phpbean的目录结构
Jan 10 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 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
php批量删除数据
2007/01/18 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
$()JS小技巧
2007/07/21 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
Node.js学习入门
2017/01/03 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
python 6种方法实现单例模式
2020/12/15 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
雷蛇美国官网:Razer
2020/04/03 全球购物
售后服务经理岗位职责范本
2014/02/22 职场文书
财务主管岗位职责
2014/02/28 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
出国留学自荐信模板
2015/03/06 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python