【发布时间】:2011-07-18 16:58:46
【问题描述】:
例如,我有 4000 行,我定义了 X 限制。
查询在找到 X 行后停止?还是查询找到所有行,然后从找到的行中取出 X 行?
谢谢。
【问题讨论】:
-
LIMIT不是 SQL 标准关键字,那么您使用的是哪个 RDBMS?
例如,我有 4000 行,我定义了 X 限制。
查询在找到 X 行后停止?还是查询找到所有行,然后从找到的行中取出 X 行?
谢谢。
【问题讨论】:
LIMIT 不是 SQL 标准关键字,那么您使用的是哪个 RDBMS?
如果你使用 LIMIT row_count 和 ORDER BY,MySQL 将结束排序为 一旦找到排序结果的前 row_count 行, 而不是对整个结果进行排序。如果订购是通过使用 索引,这非常快。如果必须进行文件排序,则所有行 match 必须选择不带 LIMIT 子句的查询,并且大多数或 必须将它们全部排序,然后才能确定 已找到第一 row_count 行。在任何一种情况下,在 已找到初始行,无需对任何余数进行排序 结果集,而 MySQL 不这样做。
因此,在应用LIMIT 之前,整个结果集似乎是可能已知的。但是 MySQL 会尝试一切它做不到的事情。您可以通过提供与您的查询相匹配的有用索引来帮助它。
编辑:此外,如果集合未排序,它会在将足够多的行流式传输到结果集时立即终止 SELECT 操作。
【讨论】:
选择 * 从your_table 限制0, 10
这将显示数据库中的前 10 个结果。
SELECT * FROM your_table LIMIT 5, 5
这将显示记录6、7、8、9和10
就像告诉MySql;我要你从5+1或第6条记录开始计数,但最多只能选择5条记录
【讨论】:
SELECT * FROM your_table LIMIT 0, 10 // MySql will return 10 rows starting from 0 和SELECT * FROM your_table LIMIT 5, 5 //MySql will Return rows Starting from the 6th & 7th, 8th, 9th, and 10th ... 此 ANSWER 对用户有何帮助?。 ...(以某种方式)我觉得被你的 cmets 欺负了
我假设您正在考虑使用 MySQL,根据documentation,答案是视情况而定。如果您使用的是LIMIT(没有HAVING),那么:
LIMIT 的几行,MySQL 使用索引
在某些情况下,通常它更愿意进行全表扫描。SQL_CALC_FOUND_ROWS。您应该在documentation 中阅读其他一些案例。
【讨论】:
它在找到 LIMIT 子句中指定的行数后停止。这可以通过大量数据来验证。如果它正在获取表的所有行并在此之后进行过滤,它会在不可能的时间内检索结果。
【讨论】:
如果您使用的是 MS SQL Server,那么您可以按如下方式编写。
Select TOP [x]
*
From MyTable
希望对你有帮助。
Vamyip
【讨论】: