如果用union all則表現形式如下:
select a from A
union all
select b from A
這樣沒問題,但有性能上的隱患,sqlserver將掃描兩次A表,邏輯讀也會激增甚至倍增。但如果select a,b from A性能消耗將倍數降低,并且實際上已經讀取到了a與b,有沒有什么辦法在僅讀取一次A表的情況下實作union all這種垂直拼接方式?或者比union all性能好一些也成。現在面臨的情況是有幾十個union all,都是合并相同關聯表的相同型別資料,個別表資料量百萬,用union all性能比較慢。
uj5u.com熱心網友回復:
可以用valuesuj5u.com熱心網友回復:
SELECT tt.val
FROM (SELECT 10 AS A, 20 AS B UNION ALL SELECT 30, 40) t
OUTER APPLY (SELECT * FROM (VALUES (t.A), (t.B)) x (val) ) tt;
uj5u.com熱心網友回復:
行轉列 unpivot 了解一下select * from 表
UNPIVOT
(
x FOR y IN(欄位1,欄位2,欄位3,欄位4)
)p
uj5u.com熱心網友回復:
一開始我也這么想的,但是試了之后發現,in后面的欄位有著一個過于嚴格的隱藏限制,除了型別一致外還必須長度完全一致否則就報型別錯誤,這就挺麻煩的。上面版主給的方法倒是沒有這個要求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/265219.html
標籤:基礎類
上一篇:優化sql
