Sql-Server

UNION ALL 顯著減慢 SQL 請求

  • November 11, 2021

我的問題是以下請求大約需要 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

引用自:https://dba.stackexchange.com/questions/302474