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 相关文章推荐
BBS(php & mysql)完整版(五)
Oct 09 PHP
php printf输出格式使用说明
Dec 05 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
CI框架安全类Security.php源码分析
Nov 04 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
php实现商城购物车的思路和源码分析
Jul 23 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中如何判断exec函数执行成功?
2016/08/04 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
Python 调用Java实例详解
2017/06/02 Python
python提取xml里面的链接源码详解
2019/10/15 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
tensorflow之并行读入数据详解
2020/02/05 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
高级销售员求职信
2013/10/25 职场文书
西门豹教学反思
2014/02/04 职场文书
家长对孩子的评语
2014/04/18 职场文书
绿色环保标语
2014/06/12 职场文书
会计个人实习计划书
2014/08/15 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
个人四风问题整改措施
2014/10/24 职场文书
六年级学生评语大全
2014/12/26 职场文书
代理词怎么写
2015/05/25 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL