我已经做了一些挖掘OPTION(FAST XXX)查询提示在SELECT语句中做了什么,并且仍然对它感到困惑.根据MSDN:
Specifies that the query is optimized for fast retrieval of the first number_rows. This is a nonnegative integer. After the first number_rows are returned,the query continues execution and produces its full result set.
对我来说没有多大意义,但基本上查询可以真正快速获得前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)
解决方法
快速N将告诉sql Server生成执行计划,并快速返回定义为N的行数.
请注意,估计将按照N,因为您告诉sql server尽可能快地检索N行.
例如在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)
Est与实际行选项(快速500)
Est与没有选项的实际行(快速500)
用例是当应用程序正在进行缓存(在后台加载大量数据)并希望尽快向用户显示一片数据时.
另一个有趣的用例是在SSIS land that Rob Farley中描述了使用FAST N作为加速数据检索的催化剂.
By adding this hint,it felt like a magic wand had been waved across the query,to make it run several times faster.