union 與 union all的區別

2021-04-29 06:34:36 字數 1263 閱讀 8412

create  view emaillogview

with   schemabinding

as select datatime, username, sourceip, destip, emailfrom, emailto, emailcc, emailbcc,   emailsub,emaildate, orderid from dbo.emaillog

union

select datatime, username, sourceip, destip, emailfrom, emailto, emailcc, emailbcc,   emailsub,emaildate, orderid from dbo.emaillog1

union

select datatime, username, sourceip, destip, emailfrom, emailto, emailcc, emailbcc,   emailsub,emaildate, orderid from dbo.emaillog2

通過select查詢檢視時發現超級慢,但對單張基表查詢卻發現比較快,查了半天的問題,卻發現是union的使用問題,union缺省會對資料進行排序,去除重複,幾千萬的資料進行排序,速度可想而知。。。更改為union  all速度明顯提高。

下面為union 與 union all的區別說明:

在資料庫中,union和union all關鍵字都是將兩個結果集合並為乙個,但這兩者從使用和效率上來說都有所不同。

union在進行表鏈結後會篩選掉重複的記錄,所以在表鏈結後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。

實際大部分應用中是不會產生重複的記錄,最常見的是過程表與歷史表union。如:

select * from gc_dfys 

union

select * from ls_jg_dfys

這個sql在執行時先取出兩個表的結果,再用排序空間進行排序刪除重複的記錄,最後返回結果集,如果表資料量大的話可能會導致用磁碟進行排序。

而union all只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。

從效率上說,union all 要比union快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用union all,如下:

select * from gc_dfys 

union all

select * from ls_jg_dfys

Union與Union All的區別

如果我們需要將兩個select語句的結果作為乙個整體顯示出來,我們就需要用到union或者union all關鍵字。union 或稱為聯合 的作用是將多個結果合併在一起顯示出來。union和union all的區別是,union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全...

union與union all的區別

union 或稱為聯合 的作用是將多個結果合併在一起顯示出來。union和union all的區別是,union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來,不管是不是重複。union 對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序 union ...

union 與 union all 的區別

union all 是直接連線,取所有值,可以會有重複 union是取唯一值,記錄沒有重複。效率 union和union all關鍵字都是將兩個結果集合並為乙個,但這兩者從使用和效率上來說都有所不同。1 對重複結果的處理 union在進行表鏈結後會篩選掉重複的記錄,union all不會去除重覆記錄...