我正在阅读查询提示的文档: http://msdn.microsoft.com/en-us/library/ms181714(SQL.90).aspx
并注意到这一点: 快速 number_rows 指定优化查询以快速检索第一个 number_rows。这是一个非负整数。返回第一个 number_rows 后,查询继续执行并生成完整的结果集。
所以当我执行如下查询时:
Select Name from Students where ID = 444
我应该为这样的提示烦恼吗?假设使用 SQL Server 2005,我什么时候应该使用?
--编辑--
在限制结果时也应该费心:
Select top 10 * from Students OPTION (FAST 10)
最佳答案
FAST 提示仅对优化器可以选择多种替代方案的复杂查询才有意义。对于像您的示例这样的简单查询,它没有任何帮助,查询优化器将立即确定存在一个简单的计划(在 ID 索引中查找,如果没有覆盖则查找名称)来满足查询并执行它。即使 ID 上不存在索引,该计划仍然很简单(可能是集群扫描)。
举一个 FAST 有用的例子,考虑 A 和 B 之间的连接,并带有 ORDER BY 约束。假设首先评估连接 B,嵌套循环 A 遵循 ORDER BY 约束,因此会产生快速结果(不需要 SORT),但由于基数而成本更高(B 有许多与 WHERE 匹配的记录,而 A 很少)。另一方面,首先评估 B 和嵌套循环 A 会产生一个执行较少 IO 的查询,因此总体速度更快,但必须首先对结果进行排序,并且 SORT 只能在评估联接之后开始,所以第一个结果会很晚才出现。优化器通常会选择第二个计划,因为整体效率更高。 FAST 提示将导致优化器选择第一个计划,因为它会更快地生成结果。
关于sql - 我应该使用快速查询提示 number_rows/FASTFIRSTROW 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308946/