-4
我有一個很大的查詢,以便從40個表中獲取數據;該查詢包含(40表選擇),每個選擇包含案例和多聯接和條件,我也有UNION
每個表選擇後。數據加載性能(SQL Server 2008)
從這些表中選擇這些選項存在於CTE中,然後從CTE中選擇最終選項。
主要的問題是性能問題,因爲我在每個表中都有大量的數據。
您能否提供給我您的主要想法或提示以提高查詢性能?
我有一個很大的查詢,以便從40個表中獲取數據;該查詢包含(40表選擇),每個選擇包含案例和多聯接和條件,我也有UNION
每個表選擇後。數據加載性能(SQL Server 2008)
從這些表中選擇這些選項存在於CTE中,然後從CTE中選擇最終選項。
主要的問題是性能問題,因爲我在每個表中都有大量的數據。
您能否提供給我您的主要想法或提示以提高查詢性能?
最好的做法是遵循先前的建議,並儘可能將您的查詢分成較小的部分。
舉例來說,如果你有這樣的:
;WITH CTE as (SELECT a FROM A UNION SELECT b FROM B)
SELECT * FROM CTE
INNER JOIN C on CTE.a = C.c
嘗試通過這種替換:
SELECT * FROM A
INNER JOIN C on A.a = C.c
UNION
SELECT * FROM B
INNER JOIN C on B.b = C.c
甚至做這樣的事情:
SELECT * INTO #t
FROM A INNER JOIN C on A.a = C.c
GO
INSERT INTO #t
SELECT * FROM B INNER JOIN C on B.b = C.c
GO
SELECT * FROM #t;
這是一個非常廣泛的問題。爲什麼你爲此使用CTE,爲什麼要在一個大查詢中結合所有數據?你的索引是否正確? –
將問題分解成更小的部分。單獨檢查每個SELECT。哪些是問題查詢? – jarlh
當然,這些索引是正確的。 另外我使用聯合爲了從很多表中返回確切的數據! – Jons