在查询中使用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服务器在找到匹配后扫描表的其余部分吗?
答案 0 :(得分:6)
是的,查询在找到足够的行后停止,并且不查询表的其余部分。
但请注意,您可能希望拥有数据库可用于查询的索引。在这种情况下,获得第一场比赛和获得所有一场比赛之间并没有任何性能差异。
答案 1 :(得分:5)
是
在这种情况下,您将得到1个未定义的行(如TOP
没有ORDER BY
并不保证任何特定结果)然后它将停止处理(TOP
迭代器计划不再请求子迭代器中的任何行)。
如果SORT
运算符之前的计划中存在阻塞运算符(例如TOP
)或TOP
之前的并行运算符,它可能最终会对行进行大量工作尽管如此,最终结果还没有归还。