jzi*_*011 9 sql database sql-server performance
TOP
在查询中使用SQL Server 子句时,SQL Server引擎是否足以满足TOP X
返回所需的行时是否停止搜索行?
请考虑以下查询(假设some_text_field是唯一的,而不是为全文索引设置):
SELECT
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
Run Code Online (Sandbox Code Playgroud)
和
SELECT TOP 1
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
Run Code Online (Sandbox Code Playgroud)
第一个查询需要搜索整个表并返回它找到的所有结果.我们设置它的方式,该查询将真正返回一个值.那么,TOP 1
一旦发现匹配,会阻止SQL服务器扫描表的其余部分吗?
是的,查询在找到足够的行后停止,并且不查询表的其余部分.
但请注意,您可能希望拥有数据库可用于查询的索引.在这种情况下,获得第一场比赛和获得所有一场比赛之间并没有任何性能差异.
是.
在这种情况下,你会得到1个未定义行(如TOP
没有ORDER BY
不保证任何特定结果),那么将停止处理(TOP
在计划将不再向孩子迭代任何更多的行迭代器).
如果SORT
在TOP
运算符或并行运算符之前的计划中存在阻塞运算符(例如),TOP
它可能最终会为最终结果中未返回的行执行大量工作.