2013-02-20 77 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只需扫描一个小的覆盖索引,而第二个计划显示它必须执行更昂贵的表扫描。