1. 程式人生 > 其它 >SQL Server ->> 聯接提示和查詢提示

SQL Server ->> 聯接提示和查詢提示

聯接提示

可以在使用JOIN時要求最終執行計劃使用指定的JOIN方式,支援LOOP\HASH\MERGE其一。這個我幾乎工作中極少使用到。除非生產環境慢SQL的執行計劃不合理,例如採用NESTED JOIN,但是LOOP的主表節點資料行數非常多,那是執行計劃錯誤,通過更新統計資料STATISTICS都無法解決,那就是SQL SERVER優化器的鍋。才需要通過聯接提示的方式改變SQL去優化。這個時候可以通過MERGE JOIN或者HASH JOIN的方式來實現。主要是HASH JOIN,因為如果是MERGE JOIN是要求資料排序,如果本身有索引我相信優化器早就使用了,出現了錯誤採用NESTED JOIN操作的情況一定是HASH JOIN優化效果大於MERGE JOIN的。當然在優化的時候,條件允許的情況下肯定是要對比下MERGE JOIN和HASH JOIN的實際執行計劃的資源消耗差異(IO、CPU和TIME)

查詢提示

SQL結尾新增OPTION來指定查詢提示,支援的查詢提示非常多。查詢提示和聯結提示的使用場景其實是一樣的,只是在下面集中場景需要考慮使用查詢提示,查詢提示在效能調優中的考慮優先順序其實是非常低的,考慮到目前SQL SERVER優化器的可靠性已經非常高的,一般情況下是不需要人為干預的。執行計劃的選擇是受到SQL語句的引數、引數表字段的資料分佈和表資料行數變化影響的,而查詢提示會生硬的要求SQL SERVER按照我們的想法去選擇執行計劃,可能當下效果達到的,但是在選擇查詢提示的時候也要考慮未來的表資料變化,不然當下的改變會造成未來某一提前的問題,未來出現問題以後負責調優的DBA就不清楚當初你為什麼要怎麼做。

1、SQL語句效能突然下降非常多,經過統計資料更新、索引優化、語句重寫都得不到解決或者達不到滿意的效果

2、統計資料、索引和語句寫法不存在問題或者最優的情況下,查詢計劃優化器的執行計劃選擇並不能滿足對效能的要求(就是執行時間還是不滿意)

上面兩種情況作為DBA可能才是需要考慮查詢提示。

不過這個顯示中用的也不多。列舉幾個用到的過或者覺得可能有用的。