2013年8月19日 星期一

UNION / UNION ALL使用與差異

聯集UNION指令為四種集合(SET)運算的一種,用途是將兩個(含以上)SQL指令所產生結果進行合併,以下將採用MSSQL指令測試,利用聯集運算指令產生虛擬記錄,其中UNIONUNION ALL兩個指令之差異在於是否會剔除重複的資料在此將進行測試。

UNION ALL
UNION
SQL
SELECT 'B' AS COL
UNION ALL
SELECT 'A' AS Val
UNION ALL
SELECT 'B' AS Result
SELECT 'B' AS COL
UNION
SELECT 'A' AS Val
UNION
SELECT 'B' AS Result
結果
COL
B
A
B
COL
A
B
1. 排序
2. 剔除重複『B

上表中,由UNION ALL產生結果(結果為B, A, B)可得知,是將各子查詢的資料集合併後直接輸出;由UNION的結果(A, B, B),系統將剔除重複資料,且結果中資料已被排序。此外,當進行聯集運算時,需注意各資料集的欄位數目需一致,以及各資料集中相同欄位的型態必須相容的限制條件,運算後的欄位名稱則直接採用第一個資料集的欄位名稱。

由於UNION指令將剔除重複資料,概念上先將資料合併後再執行DISTINCT指令以剔除重複資料,為達此目的需先進行資料排序(演算法概念),採用前需思考剔除重複資料之必要,尤其大量資料處理時,將造成MemoryI/O耗用問題(一旦使用到磁碟為排序暫存空間,則系統效能會大幅降低),如無必要則請使用UNION ALL指令。兩者差異整理如下表所示:
圖示
說明
UNION
ü   重複資料只顯示一次
ü   刪除重複資料(相當於DISTINCT
UNION ALL
ü   所有資料都會顯示,不管是否重複
ü   不會刪除重複資料,較佳的執行效能


UNION ALL指令是將各子查詢的資料集直接合併,UNION指令則是合併後排序並剔除重複資料;因UNION需排序動作故將耗用較多之資源,使用上要多加注意。






沒有留言:

張貼留言