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 相关文章推荐
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php 生成短网址原理及代码
Jan 23 PHP
php将session放入memcached的设置方法
Feb 14 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php格式化电话号码的方法
Apr 24 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
php微信公众号开发之快递查询
Oct 20 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 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模板技术[转]
2007/01/04 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
js 幻灯片的实现
2011/12/06 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Python 连连看连接算法
2008/11/22 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
美国高街时尚品牌:OASAP
2016/07/24 全球购物
质检员的岗位职责
2013/11/15 职场文书
军神教学反思
2014/02/04 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
vue打包时去掉所有的console.log
2022/04/10 Vue.js