[SQL SERVER][Memo]查詢提示 Force Order

[SQL SERVER][Memo]查詢提示 Force Order

 

今天在查BOL時,發現一個有趣的選項 Force Order(保留查詢語法所指出的聯結順序),

先來看看Force Order解釋(擷取BOL)

image

 

我相性大家都知道,連結順序可能會影響查詢結果,所以不難理解Force Order使用時機,

但我心中卻浮出小小疑問,保留查詢語法所指出的聯結順序對查詢效能有沒有影響呢?

不多說?馬上動手實驗就知道答案。

 

Query Without Force Order

select Dept_ID ,Dept_NM ,User_Code_Oth_Desc,boss_mail  
from dbo.TB_HR_DEPARTMENT  a
inner join dbo.TB_USER_CODE_OTH b
on substring(a.Dept_ID,1,2) =b.User_CODE_OTH 
inner join dbo.TB_MAIL_LIST c
on b.User_Code_Oth_Desc =c.owner 

 

 

image

image

查詢語法順序: TB_HR_DEPARTMENT 、TB_USER_CODE_OTH、TB_MAIL_LIST

執行計畫順序: TB_MAIL_LIST、TB_USER_CODE_OTH、TB_HR_DEPARTMENT

經過時間(ms):166

預估成本:0.074086

 

Query With Force Order

image

image

查詢語法順序: TB_HR_DEPARTMENT 、TB_USER_CODE_OTH、TB_MAIL_LIST

執行計畫順序: TB_HR_DEPARTMENT 、TB_USER_CODE_OTH、TB_MAIL_LIST

經過時間(ms):206

預估成本:0.161743

 

 

結論:

看來使用Force Order強制保留查詢語法聯結順序有時會得到更差的查詢效能,

一般情況來說,只要資料庫統計值正確的話,查詢最佳化程式大部分都能找到最佳的執行計畫,

所以該選項還是要對症下藥,方可藥到病除。

 

 

 

 

參考

查詢提示 (Transact-SQL)