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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
MySQL中create table语句的基本语法是
Jan 15 PHP
实用函数10
Nov 08 PHP
PHP4与PHP5的时间格式问题
Feb 17 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
php中pcntl_fork详解
Apr 01 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
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
美国最大点评网站:Yelp
2018/02/14 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
PHP经典面试题
2016/09/03 面试题
servlet面试题
2012/08/20 面试题
学习自我鉴定
2014/02/01 职场文书
法人授权委托书格式
2014/04/08 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
工作作风承诺书
2014/08/30 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
党小组鉴定意见
2015/06/02 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL