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中for循环语句的几种变型
Mar 16 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
php fckeditor 调用的函数
Jun 21 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
全面了解PHP中的全局变量
Jun 17 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
php计算整个目录大小的方法
2015/06/01 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JS解析XML实例分析
2015/01/30 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python实现FM算法解析
2019/06/18 Python
微信公众号token验证失败解决方案
2019/07/22 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
python 实现简单的FTP程序
2019/12/27 Python
Django更新models数据库结构步骤
2020/04/01 Python
keras实现多种分类网络的方式
2020/06/11 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
美德好少年事迹材料
2014/01/19 职场文书
物流专业求职信
2014/06/30 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
nginx搭建NFS网络文件系统
2022/04/14 Servers