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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
php动态绑定变量的用法
Jun 16 PHP
php微信开发接入
Aug 27 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
PHP中常用的转义函数
2014/02/28 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
javaScript中的空值和假值
2017/12/18 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
常见的python正则用法实例讲解
2016/06/21 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python 读取修改pcap包的例子
2019/07/23 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
市场营销专业推荐信
2013/11/03 职场文书
产品促销活动策划书
2014/01/15 职场文书
项目投资意向书
2014/04/01 职场文书
考核评语大全
2014/04/29 职场文书
python实现简单反弹球游戏
2021/04/12 Python