SQL Server链接服务器 - 问题:选择* X选择列
问题描述:
我与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记录)。
任何想法?
答
双方的等待事件是什么?什么是查询计划?
流程是否在等待网络流量?如果是这样,大概45列的数据在网络上传输的数据要多得多。如果我们假设它是数据量的45倍,并且快速情况下的17秒内有7秒用于网络流量,那么从一列数据到45列数据会使网络等待事件的数量增加7秒* 44列= 308秒。因此,如果没有更多的信息,通过将您通过网络发送的数据量增加45倍,从17秒到5分钟似乎至少可能是合理的。
当然,如果您告诉我们,column1
是一个大图像,其他44列是CHAR(1)
列,每列都消耗一个字节,那么网络流量的增加不会是性能变化的合理解释。
是column1
索引?如果是这样,当你想要取所有45列时,可能会有一个非常不同的计划。也许第一个查询计划显示Oracle只需扫描一个小的覆盖索引,而第二个计划显示它必须执行更昂贵的表扫描。
似乎逻辑上也测试了Oracle上的45列选择。有两个变量的两个测试没有什么可以学习的。 – 2013-02-20 19:58:51