文档章节

mysql的limit经典用法及优化

drewin
 drewin
发布于 2013/09/24 18:32
字数 642
阅读 242
收藏 42

用法一

SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1;

比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取。

用法二

SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2,1;

而这个SQL,limit后面是从第2条开始读,读取1条信息。

这两个千万别搞混哦。

用法三

 select * from tablename <条件语句> limit 100,-1

从第100条后开始-最后一条的记录

用法四

 select * from tablename <条件语句> limit 15

相当于limit 0,15   .查询结果取前15条数据用法五

mysql低版本不支持limit offset

limit offset 在mysql 4.0以上的版本中都可以正常运行,在旧版本的mysql 3.23中无效

limit m offset n 等价于 limit m,n

limit 的优化

mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降

来源:一亩三分地博客

MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。

同样是取10条数据

select * from yanxue8_visit limit 10000,10 和

select * from yanxue8_visit limit 0,10

就不是一个数量级别的。

网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。

文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)

1、offset比较小的时候。

select * from yanxue8_visit limit 10,10

多次运行,时间保持在0.0004-0.0005之间

Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10,1

) limit 10

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006

结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。

2、offset大的时候。

select * from yanxue8_visit limit 10000,10

多次运行,时间保持在0.0187左右

Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10000,1

) limit 10

多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

以后要注意改正自己的limit语句,优化一下mysql了

© 著作权归作者所有

共有 人打赏支持
drewin
粉丝 28
博文 121
码字总数 43979
作品 0
海淀
程序员
私信 提问
加载中

评论(3)

牵蜗牛去散步
Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10000,1

) limit 10

这句语句如果再加个限制 bid=2 例如:Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit where bid=2 Order By vid limit 10000,1

) and where bid=2 limit 10

为什么查询还是变了很慢! 我200w 的数据 查最末的10条 要12s 。。。。

还是我语句写的有问题请指正!!谢谢.....
drewin
drewin

引用来自“仁清烨媛”的评论

yanxue8_visit 是什么?

是表名
仁清烨媛
仁清烨媛
yanxue8_visit 是什么?
经典分享MySQL的limit查询优化

以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要优化的就是limit。MySQL的limit给分页带来了极大的方便,...

五味格子
2011/05/11
0
0
mysql limit offset

SQL中LIMIT和OFFSET的用法中哪种效率高些? 比如:SQL1 = "SELECT * FROM user LIMIT 0,20" SQL2 = "SELECT * FROM user OFFSET 0 LIMIT 20" 这两种写法效率上有差异吗?请考虑偏移量大与小的......

datacube
2018/06/29
0
0
开个贴子,讨论下Mysql文章表设计、优化问题

一般文章站现在很容易文章数上到10万(采集嘛),所以很多CMS在到了这个级别的时候就显得有的慢!生成静态文件的速度大打折扣。10万还是一个小级别的,50万、100万呢?据说msyql每个人都在玩,...

冰封情
2010/06/21
2.1K
6
MySql怎么查询前10条数据?

mysql 没有top的用法。 取而代之的是limit 语法为:limit m,n/M代表起始位置,不设置默认为0; N代表长度/ select * from table_name limit 0,10; select * from table_name limit 10;(搜前十条...

巴喇巴喇小魔仙
2014/03/27
0
0
Mysql 分页语句Limit用法

1、Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。 SELECT * FROM table LIMIT [off...

李有常
2015/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
3
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部