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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
Laravel的加密解密与哈希实例讲解
Mar 24 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
JS实现购物车特效
2017/02/02 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
详解vue中组件参数
2018/07/09 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python Socket使用实例
2017/12/18 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
高中生家长会演讲稿
2014/01/14 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
会计人员演讲稿
2014/09/11 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
客服专员岗位职责
2015/02/10 职场文书
二婚主持词
2015/06/30 职场文书
《包身工》教学反思
2016/02/23 职场文书
golang正则之命名分组方式
2021/04/25 Golang
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
Nginx反向代理、重定向
2022/04/13 Servers
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python