sql - 我应该使用快速查询提示 number_rows/FASTFIRSTROW 吗?

标签 sql sql-server query-hints

我正在阅读查询提示的文档: 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/

相关文章:

sql-server - 查询优化器无法将谓词推过汇总?提示也不起作用

sql - 优化并重新编译 Oracle 中的提示?

mysql - 如何在 select 语句中选择 count()

java - 有没有办法解析jooq中的自定义函数?

php - utf8_unicode_ci 似乎不是UTF8

sql - 确定列是增加还是减少

sql-server - 调用表值函数时添加查询提示

SQL 服务器 : Sum over a field changed after adding a LEFT JOIN

SQL Server : the maximum recursion 100 has been exhausted before statement completion

mysql - 如何使用特定的txt文件创建表?