簡體   English   中英

具有Oracle的SQL Server鏈接服務器-問題:選擇* x選擇列

[英]SQL Server Linked Server with Oracle - Issue: Select * x Select Columns

我在SQL SERVER 2008 R2上的OPENQUERY遇到性能問題:運行時:

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條記錄)。

有任何想法嗎?

雙方的等待事件是什么? 有哪些查詢計划?

進程在等待網絡流量嗎? 如果是這樣的話,那么大概45列數據將具有更多的數據要通過網絡傳輸。 如果我們假設數據量增加了45倍,並且在較快的情況下經過的17秒中有7秒花費在網絡流量上,那么從一列數據到45列數據將使網絡等待事件的數量增加7秒* 44列= 308秒。 因此,如果沒有更多信息,將通過網絡發送的數據量增加45倍從17秒增加到5分鍾似乎至少可能是合理的。

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

column1索引? 如果是這樣,當您要獲取所有45列時,也許會有一個非常不同的計划。 也許第一個查詢計划表明Oracle只需掃描一個小的覆蓋索引,而第二個計划表明它必須進行更昂貴的表掃描。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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