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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
解析php中反射的应用
Jun 18 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
php生成验证码函数
Oct 20 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
PHP与Web页面交互操作实例分析
Jun 02 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中实现Javascript的escape()函数代码
2010/08/08 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
在js中使用"with"语句中跨frame的变量引用问题
2007/03/08 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
python重试装饰器示例
2014/02/11 Python
python根据路径导入模块的方法
2014/09/30 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
学生处主任岗位职责
2013/12/01 职场文书
高中军训感言1000字
2014/03/01 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
幸福中国演讲稿
2014/09/12 职场文书
大二学年个人总结
2015/03/03 职场文书
分析并发编程之LongAdder原理
2021/06/29 Java/Android
go goroutine 怎样进行错误处理
2021/07/16 Golang
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android