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程序员应该了解MongoDB的五件事
Jun 03 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
php HTML无刷新提交表单
Apr 05 PHP
非常实用的php验证码类
May 15 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
php中Swoole的热更新实现代码实例
Mar 04 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实现七牛抓取远程图片
2015/12/01 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP实现添加购物车功能
2017/03/06 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
jQuery创建插件的代码分析
2011/04/14 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python中print函数简单使用总结
2019/08/05 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
一份比较全的PHP面试题
2016/07/29 面试题
Java如何读取CLOB字段
2013/10/10 面试题
大学生水果店创业计划书
2014/01/28 职场文书
《春晓》教学反思
2014/04/20 职场文书
关于保护环境的标语
2014/06/09 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
工作检讨书大全
2015/01/26 职场文书
自主招生英文自荐信
2015/03/25 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
消防宣传标语大全
2015/08/03 职场文书
同事离别感言
2015/08/04 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers