LIMIT

① Select * from table LIMIT m; # 从0开始,m条记录

② Select * from table LIMIT m,n; # 从m+1条记录开始,n条记录【查询语句偏移量offset很大的时候,效率较低】

③ Select * from table LIMIT rows OFFECT offset;

    第一个自变量指定:返回的第一行的偏移量offset,第二个自变量指定:返回的行数的最大值。初始行的偏移量为0(不是1)。

Select*from sakila.rental LIMIT 14036,10;#① 6ms

Select*from sakila.rental LIMIT 10 OFFSET 14036;#②
 6ms ,兼容PostgreSQL ,【结果与 ① 等价】

 

Select*from sakila.rental WHERE rental_id>=14036 LIMIT 10; 
#③ 1ms

Select*from sakila.rental WHERE rental_id>=(SELECT rental_id from sakila.rental limit 14306,1) LIMIT 10; 
#④ 3ms

 offset偏移量较大时,可先获取到offset的id后,再直接使用limit size来获取数据。(实际SQL中偏移量对应字段应该where字段不一致才有效果,和SQL①对比)

Select*from sakila.rental LIMIT 0; #⑤ 迅速返回一个空集。这可以用于检查一个查询的有效性

 

SELECT*FROM rental WHERE rental_date ='2005-08-01
09:45:58'LIMIT 1; 
#⑥ 无limit耗时0.018s,# 有limit耗时0.002s

Select*from  sakila.rental INNER JOIN(SELECT rental_id from sakila.rental limit14306,10) aa USING(rental_id);  #
3ms,必须给子查询的表加一个别名aa;效果和④等价

Note: 

  • where...limit....性能基本稳定,受偏移量offset和行数rows的影响不大;
  • 而单纯采用limit的话,受偏移量的影响很大,当偏移量大到一定后性能开始大幅下降。
时间: 2024-10-02 18:45:47

LIMIT的相关文章

在oracle中限制返回结果集的大小,类似于mysql的limit(转译)

mysql|oracle Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数. 如果你只希望返回前十行纪录,你可以这样写: SELECT * FROM table WHERE ROWNUM<10; 但是下面的语句是不对的: SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100; 这是因为 Oracle 认为这个条件不成立,所以没有返回.你应该这样写: SELECT * FROM tab

Mixed format + DML limit 引发的血案

背景 MySQL版本 5.6.16 DB架构(级联复制) M --> New_M(log_slave_update)--> S 相信做DB拆分,机房搬迁,数据库升级,都会用到这种类似的架构吧. 那么问题来了,最近做数据校验的时候,发现New_S 的数据竟然比 M,New_M 还多,是否奇怪? 案例&分析 如何做数据校验? pt-table-checksum ,或自己写对比程序. 校验出来后,发现A表在M,S,New_M三个实例上 有300条记录, New_S,Bak_etl 却有500

详解MySQL limit查询优化的实际操作步骤

详解MySQL limit查询优化的实际操作步骤

经典分享MySQL的limit查询优化

以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的.其他最为常用也是最为需要优化的就是limit.MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10        select * from yanxue8_visit limit 0,10     就不是一个数量级别的. 网上也很多关

APACHE利用Limit模块限制IP连接数

系统版本:centos6.3 APACHE版本:apache2.42(编译安装) 1.配置Limit模块 #wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 安装: #tar jxvf mod_limitipconn-0.24.tar.bz2 #cd mod_limitipconn-0.24 #vi Makefile 找到APXS这行,改成 APXS=/usr/local/apache2/bin/apxs #make

MYSQL的limit优化

MySQL的优化是非常重要的.其他最常用也最需要优化的就是limit.mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

深入研究mysql中的varchar和limit(容易被忽略的知识)

 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题. 1.varchar(5)可以存储多少个汉字,多少个字母数字? 相信有好多人应该跟我一样,对这个已经很熟悉了,根据经验我们能很快的做出决定,比如说用varchar(200)去存储url等等,但是,即使你用了很多次也很熟悉了,也有可能对上面的问题做出错误的回答. 这个问题我查了好多资料,有

MySql中取前几行数据使用limit来完成

在mysql中是没有top关键字的,不过可以用limit来完成此功能,下面举例为大家详细介绍下它的使用方法,不会的朋友可以学习下   在mysql中是没有top关键字的,在mysql中可以用limit来完成功能. order by id desc limit 10 按照id的倒序排序 取出前10条 order by id desc limit 0,10 按照id的倒序排序 取出前10条 order by id limit 5,10 按照id的正序排序 从第5条开始取10条 复制代码 代码如下:

php中explode的负数limit用法分析

 这篇文章主要介绍了php中explode的负数limit用法,实例分析explode中limit参数为负的用法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php中explode的负数limit用法.分享给大家供大家参考.具体分析如下: explode -- 使用一个字符串分割另一个字符串,使之成为数组. 参数为: ? 1 array explode ( string separator, string string [, int limit] ) 最后的limit可不填

业务SQL那些事--慎用LIMIT

业务SQL那些事--慎用LIMIT 在业务中使用LIMIT限制SQL返回行数是很常见的事情,但如果不知道其中可能的坑或者说真正执行逻辑,就可能会使SQL执行非常慢,严重影响性能. LIMIT OFFSET, ROW_COUNT实现分页 业务反映一条SQL执行非常慢.简单分析,例如下面的schema与SQL(演示 databae:PostgreSQL): create table t(c1 varchar(20) primary key, c2 int); select * from t wher