一位同事要求我查看某些表格的索引,因爲他的查詢運行時間很長。一個多小時。這個加入提示是否危險?
select count(1)
from databaseA.dbo.table1
inner join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
請注意不同的數據庫。這是從DatabaseB運行的
表1和表2的長度超過200萬條記錄。表3有十幾個記錄左右。
我查看了查詢計劃,優化器決定使用Table3作爲驅動表,將嵌套循環索引搜索到表1和表2中!
我的第一個假設是,統計數據受到嚴重搞砸上Tables1 & 2,但更新統計之前,我嘗試過加入正是如此聯接提示:在15秒內返回
select count(1)
from databaseA.dbo.table1
inner HASH join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
結果。
由於時間不夠,我把結果通知給了他,但我擔心這可能會導致問題在後面。
我應該重新審視統計問題並以這種方式解決問題嗎?糟糕的查詢計劃是否來自於來自單獨數據庫的連接?
任何人都可以根據您的經驗給我一些想法嗎?