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入门小知识
Mar 24 PHP
php session处理的定制
Mar 16 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
PHP加密解密字符串汇总
Apr 26 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
因str_replace导致的注入问题总结
Aug 08 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
物理教师自荐信范文
2013/12/28 职场文书
活动邀请函范文
2014/01/19 职场文书
师德演讲稿范文
2014/05/06 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
公司演讲稿开场白
2014/08/25 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
会计工作态度自我评价
2015/03/06 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
电工实训心得体会
2016/01/14 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
Redis如何一键部署脚本
2021/04/12 Redis