2013-02-20 78 views
0

我與OPENQUERY性能問題上的SQL Server 2008 R2: 當我運行:SQL Server鏈接服務器 - 問題:選擇* X選擇列

select 
* 
from openquery([LINKEDSERVER],' 
      SELECT 
      COLUMN1,COLUMN2,COLUMN3...(45 columns at all) 
      FROM ORACLE_TABLE 
      WHERE X>Y') 

響應時間過去5分鐘(是的,5分鐘)。但是,如果我上運行Oracle方面同select一個僅列:

select 
* 
from openquery([SERVER],' 
      SELECT 
      COLUMN1 
      FROM ORACLE_TABLE 
      WHERE X>Y') 

響應時間爲17秒(10.000記錄)。

任何想法?

+1

似乎邏輯上也測試了Oracle上的45列選擇。有兩個變量的兩個測試沒有什麼可以學習的。 – 2013-02-20 19:58:51

回答

1

雙方的等待事件是什麼?什麼是查詢計劃?

流程是否在等待網絡流量?如果是這樣,大概45列的數據在網絡上傳輸的數據要多得多。如果我們假設它是數據量的45倍,並且快速情況下的17秒內有7秒用於網絡流量,那麼從一列數據到45列數據會使網絡等待事件的數量增加7秒* 44列= 308秒。因此,如果沒有更多的信息,通過將您通過網絡發送的數據量增加45倍,從17秒到5分鐘似乎至少可能是合理的。

當然,如果您告訴我們,column1是一個大圖像,其他44列是CHAR(1)列,每列都消耗一個字節,那麼網絡流量的增加不會是性能變化的合理解釋。

column1索引?如果是這樣,當你想要取所有45列時,可能會有一個非常不同的計劃。也許第一個查詢計劃顯示Oracle只需掃描一個小的覆蓋索引,而第二個計劃顯示它必須執行更昂貴的表掃描。