我有4000行,例如,我定义了X限制。
查询在找到X行后停止了吗?或者查询找到所有行,然后从找到的行中获取X行?
谢谢。
答案 0 :(得分:20)
如果将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会使用索引
在某些情况下,通常情况下,它更愿意进行全表扫描。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子句:
因此,这两个子句是等效的:
> LIMIT row_count;
> LIMIT 0 , row_count;
下图说明了SELECT语句中LIMIT子句的评估顺序:
答案 5 :(得分:-4)
如果您使用的是MS SQL Server,那么您可以按照下面的说明编写它。
Select TOP [x]
*
From MyTable
希望它有所帮助。
Vamyip