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它可能最终会为最终结果中未返回的行执行大量工作.
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |