一旦找到足够的行,SQL Server TOP是否会停止处理?

时间:2012-03-13 16:57:11

标签: sql sql-server database performance

在查询中使用SQL Server TOP子句时,一旦SQL Server引擎足以满足需要返回的TOP X,它是否会停止搜索行?

考虑以下查询(假设some_text_field是唯一的,而不是为全文索引设置):

SELECT
    pk_id
FROM
    some_table
WHERE
    some_text_field = 'some_value';

SELECT TOP 1
    pk_id
FROM
    some_table
WHERE
    some_text_field = 'some_value';

第一个查询需要搜索整个表并返回它找到的所有结果。我们设置它的方式,该查询将真正返回一个值。那么,使用TOP 1会阻止SQL服务器在找到匹配后扫描表的其余部分吗?

2 个答案:

答案 0 :(得分:6)

是的,查询在找到足够的行后停止,并且不查询表的其余部分。

但请注意,您可能希望拥有数据库可用于查询的索引。在这种情况下,获得第一场比赛和获得所有一场比赛之间并没有任何性能差异。

答案 1 :(得分:5)

在这种情况下,您将得到1个未定义的行(如TOP没有ORDER BY并不保证任何特定结果)然后它将停止处理(TOP迭代器计划不再请求子迭代器中的任何行)。

如果SORT运算符之前的计划中存在阻塞运算符(例如TOP)或TOP之前的并行运算符,它可能最终会对行进行大量工作尽管如此,最终结果还没有归还。

相关问题