強迫SQL Server履行籌劃應用並行晉升在龐雜查詢語句下的機能。本站提示廣大學習愛好者:(強迫SQL Server履行籌劃應用並行晉升在龐雜查詢語句下的機能)文章只能為提供參考,不一定能成為您想要的結果。以下是強迫SQL Server履行籌劃應用並行晉升在龐雜查詢語句下的機能正文
經由過程不雅察履行籌劃,發明之前的履行籌劃在許多年夜表銜接的部門應用了Hash Join,因為觸及的表中數據浩瀚,是以查詢優化器選擇應用並行履行,速度較快。而我們優化完的履行籌劃因為索引的存在,且表內數據異常年夜,過濾前提的值在一個很寬的統計信息步長規模內,招致估量行數湧現較年夜誤差(過濾前提現實為15000行,步長內估量的均勻行數為800行閣下),是以查詢優化器選擇了Loop Join,且沒有選擇並行履行,是以履行時光不降反升。
因為語句是在存儲進程中完成,是以我們直接對該語句應用一個undocument查詢提醒,使得該查詢的並行開支阈值強迫降為0,使得該語句強迫走並行,語句履行時光由20秒降為5秒(注:應用Hash Join提醒是7秒)。
上面經由過程一個簡略的例子展現應用該提醒的後果,示例T-SQL如代碼清單1所示:
SELECT * FROM [AdventureWorks].[Sales].[SalesOrderDetail] a INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID=b.SalesOrderID
代碼清單1.
該語句默許不會走並行,履行籌劃如圖1所示:
圖1.
上面我們對該語句加上提醒,如代碼清單2所示。
SELECT * FROM [AdventureWorks].[Sales].[SalesOrderDetail] a INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID=b.SalesOrderID OPTION(querytraceon 8649)
代碼清單2.
此時履行籌劃會依照提醒走並行,如圖2所示:
圖2.
在面臨一些龐雜的DSS或OLAP查詢時碰到相似的情形,可以斟酌應用該Undocument提醒請求SQL Server盡量的應用並行,從而下降履行時光。