[英]SQL Sub-Query performance issue
我的SQL子查詢遇到性能問題。
作為硬編碼查詢,運行大約需要1秒鍾:
SELECT ColumnA
,ColumnB
,ColumnC
FROM [LinkedServer].[Database].[Schema].[View]
WHERE ColumnA IN
(
'ABC',
'DEF',
'HIJ',
'KLM'
)
但是,以下代碼需要一分鍾的時間才能運行:
SELECT ColumnA
,ColumnB
,ColumnC
FROM [LinkedServer].[Database].[Schema].[View]
WHERE ColumnA IN
(
SELECT ColumnA FROM #TempTable
)
臨時表包含與硬編碼示例相同的4行。 鏈接服務器上的視圖包含大約。 700,000行(不幸的是,這超出了我的控制范圍)。 ColumnA數據類型相同,並且兩個表都已建立索引。
關於如何改善此查詢性能的任何想法?
非常感謝。
嘗試JOIN
:
SELECT V.ColumnA
,V.ColumnB
,V.ColumnC
FROM [LinkedServer].[Database].[Schema].[View] V
INNER JOIN #TempTable T ON V.ColumnA = T.ColumnA
它可能與查詢計划的創建方式有關。 在一種情況下,SQL Server知道在比較中將使用什么值,在第二種情況下,它正在估計。 單擊“包括實際執行計划”后,在單獨的Management Studio窗口中運行每個查詢。 您可能會看到不同的計划。 我要檢查的第一件事是將鼠標懸停在鏈接動作的箭頭上(從粗線開始),然后將“估計的行數”與“實際的行數”進行比較。 這些值之間的較大差異(系數為10?)可能導致SQL Server做出錯誤的決定(表掃描與索引等)。如果看到此錯誤,則可以考慮讓SQL更改其計划的提示-如果需要使用慢查詢! 提示的最大問題是,隨着數據量的變化,提示很容易成為障礙而不是好處,因此被認為是不得已的方法。
鏈接服務器供應商為我提供了其他來源。 現在,我連接到單個表,而不是連接到視圖(它本身分布在多個服務器上)。 結合Brian的INNER REMOTE JOIN建議,幾乎立即返回完整的數據集。
盡管我無法遵循增強的特權/鏈接服務器選項,這令人有些沮喪,但至少此查詢運行良好。
非常感謝大家的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.