[SQL SERVER][Memo]查詢提示 Force Order
今天在查BOL時,發現一個有趣的選項 Force Order(保留查詢語法所指出的聯結順序),
先來看看Force Order解釋(擷取BOL)
我相性大家都知道,連結順序可能會影響查詢結果,所以不難理解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
查詢語法順序: 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
查詢語法順序: 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)