SQL Server与Oracle链接的服务器-问题:选择*x选择列
SQL SERVER 2008 R2上的SQL Server与Oracle链接的服务器-问题:选择*x选择列,sql,performance,oracle,linked-server,Sql,Performance,Oracle,Linked Server,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分钟)。但是,如果我运行相同的s
OPENQUERY
存在性能问题:
当我跑步时:
select
*
from openquery([LINKEDSERVER],'
SELECT
COLUMN1,COLUMN2,COLUMN3...(45 columns at all)
FROM ORACLE_TABLE
WHERE X>Y')
响应时间超过5分钟(是,5分钟)。但是,如果我运行相同的select
,Oracle端只有一列:
select
*
from openquery([SERVER],'
SELECT
COLUMN1
FROM ORACLE_TABLE
WHERE X>Y')
响应时间为17秒(10.000条记录)
有什么想法吗?双方的等待事件是什么?查询计划是什么 进程是否在等待网络流量?如果是这样的话,大概45列数据有更多的数据要通过网络传输。如果我们假设它的数据量是原来的45倍,并且在更快的情况下,17秒中的7秒用于网络流量,那么从一列数据到45列数据将使网络等待事件的数量增加7s*44列=308秒。因此,在没有更多信息的情况下,将通过网络发送的数据量增加45倍,从17秒增加到5分钟似乎至少是合理的 当然,如果您告诉我们,
column1
是一个大图像,而其他44列是CHAR(1)
列,每个列消耗一个字节,那么网络流量的增加并不能合理解释性能的变化
column1
是否已编制索引?如果是这样,当您想要获取所有45列时,可能有一个非常不同的计划。也许第一个查询计划显示Oracle只需扫描一个小的覆盖索引,而第二个计划显示它必须进行更昂贵的表扫描。在Oracle上测试45列select似乎是合乎逻辑的。有两个变量的两个测试没有什么可学的。