mysql limit查询优化分析


Posted in PHP onNovember 12, 2008

Limit语法:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT接受一个或两个数字参数。参数必须是一个整数常量。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。
为了与 PostgreSQL 兼容,MySQL 也支持句法:LIMIT # OFFSET #。

eg:

mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1
mysql> SELECT * FROM table LIMIT 95,-1; //检索记录行96-last
//如果只给定一个参数,它表示返回最大的记录行数目,换句话说,LIMIT n 等价于 LIMIT 0,n
mysql> SELECT * FROM table LIMIT 5; //检索前5个记录行

MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。
同样是取10条数据,下面两句就不是一个数量级别的。

select * from table limit 10000,10
select * from table limit 0,10

文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。

这里我具体使用数据分两种情况进行测试。

1、offset比较小的时候:

select * from table limit 10,10 
//多次运行,时间保持在0.0004-0.0005之间
Select * From table Where vid >=(Select vid From table Order By vid limit 10,1) limit 10 
//多次运行,时间保持在0.0005-0.0006之间,主要是0.0006

结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。

2、offset大的时候:

select * from table limit 10000,10 
//多次运行,时间保持在0.0187左右
Select * From table Where vid >=(Select vid From table Order By vid limit 10000,1) limit 10
//多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
PHP 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
数字转英文
Dec 06 PHP
PHP中ADODB类详解
Mar 25 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
php压缩文件夹最新版
Jul 18 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
令PHP初学者头疼十四条问题大总结
Nov 12 #PHP
PHP程序61条面向对象分析设计的经验小结
Nov 12 #PHP
Php Cookie的一个使用注意点
Nov 08 #PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 #PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 #PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 #PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
Oct 25 #PHP
You might like
给海燕B411配件机起死回生配上件
2021/03/02 无线电
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
JavaScript 高效运行代码分析
2010/03/18 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
医生爱岗敬业演讲稿
2014/08/26 职场文书
房产公证委托书范本
2014/09/20 职场文书
初婚初育证明范本
2014/11/24 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
小升初自荐信范文
2015/03/05 职场文书
冲出亚马逊观后感
2015/06/03 职场文书