Sql-Server
UNION ALL 顯著減慢 SQL 請求
我的問題是以下請求大約需要 45 分鐘才能完成(Azure S2 MSSQL):
SELECT * FROM fooEmployeesView fe WHERE fe.departmentId = ‘xyz’
聯合所有
SELECT * FROM barEmployeesView 位於 WHERE be.departmentId = ‘xyz’
而分別執行時,兩個 select 語句中的每一個都需要不到 1 秒的時間。基本上我正在尋找 union all 聲明的替代方案,因為我不明白為什麼需要這麼長時間。
有關視圖的更多資訊:每個視圖總共顯示 300-500 個條目(沒有 where 子句),通常會導致 0-5 個帶有 where 子句的條目(兩個視圖中沒有重複項)。所以數據真的不是很多,所以希望有替代方案。結合兩個請求的功能就可以了。
我已經花了很多時間來研究執行計劃。兩個視圖(fooEmployeesView 和 barEmployeesView)都使用了很多連接。所以我不是在這裡尋找根本原因,因為我猜你需要更多資訊。我只是認為我有兩個執行得非常快的選擇語句,我只想合併結果。如果在 SQL 中沒有好的解決方案,我可能會在我的程式碼中發出兩個請求並將列表合併到程式碼中,但如果可能的話,我想避免這種情況。
單獨執行時,兩個 select 語句中的每一個都需要不到 1 秒的時間
那麼一個快速而骯髒的解決方法可能是
set nocount on; SELECT * into #foo FROM fooEmployeesView fe WHERE fe.departmentId = 'xyz' SELECT * into #bar FROM barEmployeesView be WHERE be.departmentId = 'xyz' select * from #foo union all select * from #bar