'LIMIT'参数如何在sql中工作?

时间:2011-07-18 16:58:46

标签: mysql sql limit

我有4000行,例如,我定义了X限制。

查询在找到X行后停止了吗?或者查询找到所有行,然后从找到的行中获取X行?

谢谢。

6 个答案:

答案 0 :(得分:20)

来自MySQL Reference Manual

  

如果将LIMIT row_count与ORDER BY一起使用,则MySQL将排序结束为   很快它找到了排序结果的第一个row_count行,   而不是整理整个结果。如果订购是通过使用   索引,这是非常快的。如果必须完成一个filesort,那么所有的行   匹配查询,不必选择LIMIT子句,大多数或   所有这些都必须进行分类,然后才能确定   已找到第一个row_count行。在任何一种情况下,之后   已找到初始行,无需对任何余数进行排序   结果集,MySQL没有这样做。

因此看起来可能在应用LIMIT之前已知整个结果集。但MySQL会尝试一切不能这样做的东西。您可以通过提供与您的查询匹配的有用索引来帮助它。

编辑:此外,如果集合未排序,则只要将足够的行流式传输到结果集,它就会终止SELECT操作。

答案 1 :(得分:17)

SELECT * FROM your_table LIMIT 0, 10

这将显示数据库中的前10个结果

SELECT * FROM your_table LIMIT 5, 5

这将显示记录 6,7,8,9和10

这就像告诉MySql;我希望您从 5 + 1或第6条记录开始计算,但只选择最多 5条记录

答案 2 :(得分:2)

我假设您在考虑MySQL,根据documentation,答案取决于它。如果您使用的是LIMIT(没有HAVING),那么:

  • 如果您只选择LIMIT的几行,MySQL会使用索引 在某些情况下,通常情况下,它更愿意进行全表扫描。
  • 一旦MySQL向客户端发送了所需的行数,它就会中止查询,除非您使用的是SQL_CALC_FOUND_ROWS

您应该在documentation中阅读其他一些案例。

答案 3 :(得分:1)

在找到LIMIT子句中指定的行数后停止。这可以通过大量数据进行验证。它检索结果的时间是不可能的,如果它获取表的所有行并在此之后进行过滤。

答案 4 :(得分:-1)

MySQL LIMIT子句简介

以下说明了带有两个参数的LIMIT子句语法:

SELECT 
select_list
FROM
table_name
LIMIT [offset,] row_count;
  • offset指定要返回的第一行的偏移量。第一行的偏移量是0,而不是1。
  • row_count指定要返回的最大行数。

下图说明了LIMIT子句:

enter image description here

因此,这两个子句是等效的:

> LIMIT row_count; 
> LIMIT 0 , row_count;

下图说明了SELECT语句中LIMIT子句的评估顺序:

enter image description here

答案 5 :(得分:-4)

如果您使用的是MS SQL Server,那么您可以按照下面的说明编写它。

Select TOP [x]

*
From MyTable

希望它有所帮助。

Vamyip