Mat*_*ete 34 sql-server hints t-sql microsoft-dynamics
我已经对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但我仍然对此感到困惑。根据 MSDN:
指定为快速检索第一个 number_rows 优化查询。这是一个非负整数。返回第一个 number_rows 后,查询将继续执行并生成其完整结果集。
对我来说这没有多大意义,但基本上查询可以非常快地获得前 XXX 行,然后以正常速度获得其余行?
让我想到这一点的 Microsoft Dynamics 查询是:
select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like '%'
order by project OPTION(FAST 500)
Run Code Online (Sandbox Code Playgroud)
谁能准确解释这个查询提示在做什么以及它比不使用它的优势?
Kin*_*hah 29
AFAST N将告诉 SQL Server 生成一个执行计划,并快速返回定义为 的行数N。
请注意,N由于您告诉 sql serverN尽可能快地检索行,因此估计值将按照。
例如在查询下运行fast 500:
-- total rows : 19972
SELECT [BusinessEntityID]
,[TotalPurchaseYTD]
,[DateFirstPurchase]
,[BirthDate]
,[MaritalStatus]
,[YearlyIncome]
,[Gender]
,[TotalChildren]
,[NumberChildrenAtHome]
,[Education]
,[Occupation]
,[HomeOwnerFlag]
,[NumberCarsOwned]
FROM [AdventureWorks2012].[Sales].[vPersonDemographics]
order by BusinessEntityID
option (fast 500)
Run Code Online (Sandbox Code Playgroud)
估计与实际行 option (fast 500)
估计与实际行没有 option (fast 500)
一个用例是当应用程序进行缓存(在后台加载大量数据)并希望尽快向用户显示数据片段时。
另一个有趣的用例是在SSIS 领域,Rob Farley将其描述FAST N为加速数据检索的催化剂。
通过添加这个提示,感觉就像在查询中挥舞着一根魔杖,使其运行速度提高了数倍。
另请参阅Remus Rusanu 的回答。
cod*_*g82 14
当您使用此查询提示 OPTION(FAST n) 时,优化器会选择一个执行计划,该计划可以以最快的方式返回该数量的记录。通常,优化器会尝试确定可以有效返回完整结果集的路径。因此,如果您希望一组行快速返回,您可以使用它来检索它们,但在大多数情况下,使用此提示将导致完整结果集返回速度较慢,而不是让优化器使用计划来执行所以。
只是详细说明一个用例:您可能需要将两个相当大的表连接在一起,但您知道只有其中一个需要处理较小的数据集。在这种情况下,在更大的表上使用 FAST 而不必创建额外的索引/开销可以帮助而不是让 SQL 在后台创建一个巨大的哈希表。