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 EOT定界符的使用详解
Sep 30 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
PHP判断是否有Get参数的方法
May 05 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
Linux系统下安装PHP7.3版本
Jun 26 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新闻发布系统教程
2014/05/09 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
Javascript面向对象编程
2012/03/18 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
Django中Middleware中的函数详解
2019/07/18 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
机关门卫岗位职责
2013/12/30 职场文书
创业计划书如何编写
2014/02/06 职场文书
法制演讲稿
2014/09/10 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
学校工会工作总结2015
2015/05/19 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技