国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

強制SQL Server執行計劃使用并行提升在復雜查詢語句下的性能

2024-08-31 00:55:33
字體:
來源:轉載
供稿:網友
強制SQL Server執行計劃使用并行提升在復雜查詢語句下的性能

    最近在給一個客戶做調優的時候發現一個很有意思的現象,對于一個復雜查詢(涉及12個表)建立必要的索引后,語句使用的IO急劇下降,但執行時間不降反升,由原來的8秒升到20秒。

    通過觀察執行計劃,發現之前的執行計劃在很多大表連接的部分使用了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 bON a.SalesOrderID=b.SalesOrderID

代碼清單1.

 

    該語句默認不會走并行,執行計劃如圖1所示:

image

圖1.

 

    下面我們對該語句加上提示,如代碼清單2所示。

SELECT *  FROM [AdventureWorks].[Sales].[SalesOrderDetail] a   INNER JOIN [Sales].SalesOrderHeader b  ON a.SalesOrderID=b.SalesOrderID  OPTION(querytraceon 8649)

代碼清單2.

 

    此時執行計劃會按照提示走并行,如圖2所示:

image

圖2.

 

    在面對一些復雜的DSS或OLAP查詢時遇到類似的情況,可以考慮使用該Undocument提示要求SQL Server盡可能的使用并行,從而降低執行時間。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎囊县| 抚远县| 六安市| 商城县| 昆明市| 洞口县| 栾城县| 南溪县| 金塔县| 响水县| 绥阳县| 枣强县| 澜沧| 喀什市| 本溪| 临桂县| 昆山市| 靖边县| 即墨市| 阿荣旗| 大竹县| 乌兰浩特市| 南皮县| 霸州市| 武城县| 莫力| 克拉玛依市| 高雄市| 龙里县| 康乐县| 拉萨市| 中卫市| 瓦房店市| 稷山县| 尉犁县| 山丹县| 云霄县| 合山市| 榆林市| 临夏县| 望谟县|