`
MauerSu
  • 浏览: 513712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Mysql中limit的用法详解

 
阅读更多
源:http://blog.csdn.net/zhqingyun163/article/details/5053579
评:

Mysql中limit的用法:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
SELECT * FROM table   LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n。
注意limit 10和limit 9,1的不同:
例如:
1.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90001
) As tmp
) limit 100;
2.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90000,1
) As tmp
) limit 100;
同样是取90000条后100条记录,第1句快还是第2句快?
第1句是先取了前90001条记录,取其中最大一个ID值作为起始标识,然后利用它可以快速定位下100条记录
第2句择是仅仅取90000条记录后1条,然后取ID值作起始标识定位下100条记录
第1句执行结果.100 rows in set (0.23) sec
第2句执行结果.100 rows in set (0.19) sec
其实第2句完全可以简化成:
Select * From cyclopedia Where ID>=(
Select ID From cyclopedia limit 90000,1
)limit 100;
直接利用第90000条记录的ID,不用经过Max运算,这样做理论上效率因该高一些,但在实际使用中几乎看不到效果,因为本身定位ID返回的就是1条记录,Max几乎不用运作就能得到结果,但这样写更清淅明朗,省去了画蛇那一足.
Select Top 100 * From cyclopedia Where ID>=(
Select Top 90001 Max(ID) From (
Select ID From cyclopedia Order By ID
) As tmp
)
但不管是实现方式是存贮过程还是直接代码中,瓶颈始终在于MS-SQL的TOP总是要返回前N个记录,这种情
况在数据量不大时感受不深,但如果成百上千万,效率肯定会低下的.相比之下MySQL的limit就有优势的多
,执行:
Select ID From cyclopedia limit 90000
Select ID From cyclopedia limit 90000,1
的结果分别是:
90000 rows in set (0.36) sec
1 row in set (0.06) sec
而MS-SQL只能用Select Top 90000 ID From cyclopedia 执行时间是390ms,执行同样的操作时间也不及MySQL的360ms.
limit的offset(偏移量)用于记录较多的时候,记录较少时,偏移offset较小,直接使用limit较优。offset越大,后者越优。
////////////////////////////////////////////////////////////////////////
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越大,后者越优。
//////////////////////////////////////////////////////////////////////////////////////////////
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目
分享到:
评论

相关推荐

    mysql delete limit 使用方法详解

    MySQL中的`DELETE`语句是用于从数据库表中删除数据的关键操作。然而,在大量数据处理时,直接使用`DELETE`可能会导致性能问题,因为它可能会锁定整个表,影响其他并发操作。这就是`DELETE ... LIMIT`语句的作用,它...

    Mysql中limit的用法方法详解与注意事项

    - 如果可能,尽量避免在`WHERE`子句中使用`LIMIT`,因为它可能会阻止MySQL使用索引。 - 对于大偏移量,可以考虑使用`IN`子句和临时表来提高性能。 总的来说,`LIMIT`是MySQL中处理查询结果集大小的有效工具,但...

    mysql分页的limit参数简单示例

    Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit

    详解mysql的limit经典用法及优化实例

    这种用法通常表示从某个位置之后直到数据集末尾,但在MySQL中,使用负数偏移量并不常见,且可能在某些版本中不被支持。 **用法四:省略偏移量** ```sql select * from tablename <条件语句> limit 15 ``` 这相当于`...

    mysql update语句的用法详解.doc

    MySQL UPDATE语句的用法详解 MySQL UPDATE语句是用于更新数据库表中已有的记录的语句。该语句可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE...

    Mysql Limit 分页查询优化详解

    MySQL中的LIMIT子句常用于实现分页查询,它允许我们从结果集中选择特定数量的行。在处理大量数据时,不恰当的分页查询可能会导致性能下降,因为MySQL需要扫描和处理更多的行。本篇文章将深入探讨如何优化使用LIMIT...

    详解MySQL的limit用法和分页查询语句的性能分析

    总的来说,理解并正确使用`LIMIT`和其相关的分页优化技术对于在大型MySQL数据库中实现高效的数据检索至关重要。在设计数据库和编写查询时,应始终考虑性能因素,并根据实际情况调整查询策略。同时,定期审查和优化...

    mysql所有的查询语句详解

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web开发中,与Java服务器页面(JSP)结合使用时,它的查询语句是数据交互的核心。在本篇中,我们将深入探讨MySQL在JSP中的所有主要查询语句,以及如何在...

    mysql踩坑之limit与sum函数混合使用问题详解

    在MySQL数据库中,`LIMIT` 与聚合函数如 `SUM()` 混合使用时,可能会引发一些预期之外的问题。本文将深入探讨这个问题,并提供解决方案。 首先,让我们回顾一下问题的背景。假设我们有一个名为 `order` 的订单表,...

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

    在mysql中是没有top关键字的,在mysql中可以用limit来完成功能。 order by id desc limit 10 按照id的倒序排序 取出前10条 order by id desc limit 0,10 按照... 您可能感兴趣的文章:深入分析Mysql中limit的用法详解My

    mysql limit分页优化详细介绍

    MySQL中的`LIMIT`子句是执行分页查询的关键,它允许我们从结果集中选择特定数量的行。然而,当处理大量数据时,直接使用`LIMIT`进行深度分页(即跳过很多行后再取少量数据)可能会导致显著的性能下降。这是因为MySQL...

    如何提高MySQL Limit查询性能的方法详解

    在MySQL数据库操作中,优化Limit查询性能至关重要,尤其是在处理大量数据时。Limit关键字常用于分页查询,但当数据量巨大时,单纯使用Limit进行全表扫描可能导致性能急剧下降。以下是一些提高Limit查询性能的方法。 ...

    MySQL Limit性能优化及分页数据性能优化详解

    MySQL中的`LIMIT`子句是用于限制SQL查询返回的行数,特别适用于分页查询,即在网页或其他界面中按页显示数据。然而,当处理大量数据时,不恰当的`LIMIT`使用可能会导致显著的性能下降。以下是对`LIMIT`性能优化及...

    mysql面试题40道详解.docx

    MySQL 是一个广泛使用的开源关系型数据库管理系统,支持 SQL 语言,提供高效的数据存储、管理和检索功能。SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括数据查询、数据更新、数据插入和...

    基于MySQL到MongoDB简易对照表的详解

    对于分页查询,MySQL中的SELECT * FROM user LIMIT 10,20可以实现从第11条记录开始获取20条记录,MongoDB中则是使用skip和limit方法,例如db.user.find().skip(10).limit(20)。 在处理查询IN的条件时,MySQL使用...

Global site tag (gtag.js) - Google Analytics