簡體   English   中英

SQL子查詢性能問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM