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网站提速三大“软”招
Oct 09 PHP
php学习 字符串课件
Jun 15 PHP
又一个php 分页类实现代码
Dec 03 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
yii用户注册表单验证实例
Dec 26 PHP
php简单获取复选框值的方法
May 11 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
浅析PHP中的闭包和匿名函数
Dec 25 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
Display SQL Server Version Information
2007/06/21 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
Django学习教程之静态文件的调用详解
2018/05/08 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
枚举与#define宏的区别
2014/04/30 面试题
介绍一下except的用法和作用
2015/01/22 面试题
大学生饮食连锁店创业计划书
2014/01/17 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
幼教求职信
2014/03/12 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
文员岗位职责
2015/02/04 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
如何书写邀请函?
2019/06/24 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技