2017-05-10 35 views
2

我們的SQL Server從2012年升級到2014年後,某些存儲過程的性能下降了。如何在此插入SQL中添加查詢提示?

我們發現,query hint可以用來解決這個問題,但是我不知道我們如何在如下結構的SQL添加查詢提示:

INSERT INTO TABLE1 .... 
    SELECT ... 
    FROM TABLE2 
    --OPTION (QUERYTRACEON 9481) 

如果我只是在片段末尾添加它(註釋行),是否影響SELECT查詢,INSERT查詢或兩者?如果我只想在SELECTINSERT上使用查詢提示,那麼該怎麼辦?

回答

1

如果您使用此跟蹤標誌,您所做的是您指示查詢優化程序使用2012基數評估程序。如果跟蹤標誌會影響任何查詢執行計劃以意外方式, 但提高了一些其他的查詢執行計劃,你可能要啓用一個

: 您可以在查詢級別做到這一點作爲documentation規定僅針對特定查詢的相應跟蹤標誌。

如果你使用它,你現在所做的,它會影響整個INSERT INTO SELECT語句,但如果你只是想查詢的一個使用舊的基數估計被執行,則需要更改您的語句轉換成兩個不同的查詢(例如將數據插入臨時表中,然後選擇到您的表中),以便您只使用其中一個查詢的跟蹤。

你可以閱讀更多關於這個StackOverflow post

0

跟蹤標誌9481強制查詢優化器在創建查詢計劃(msdn)時使用基數估計器的版本70(SQL Server 2012版本) 它肯定會影響查詢中的所有操作,包括insert和select,但是你可能期望在插入運算符中有什麼不同? 基數估計影響連接策略,並且插入不執行ani掃描/查找/連接