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 相关文章推荐
PHP 中文处理技巧
Apr 25 PHP
PHP 面向对象详解
Sep 13 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
PHP连接access数据库
Mar 27 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
php日期操作技巧小结
Jun 25 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
PHP哈希表实现算法原理解析
Dec 11 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
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
Python的另外几种语言实现
2015/01/29 Python
Python实现字典的key和values的交换
2015/08/04 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
如何设置Java的运行环境
2013/04/05 面试题
教师自我评价范文
2013/12/16 职场文书
仓库组长岗位职责
2014/01/29 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
国庆节演讲稿
2014/05/27 职场文书
先进班集体申报材料
2014/12/26 职场文书
离婚被告代理词
2015/05/23 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
详解JVM系列之内存模型
2021/06/10 Javascript