我需要定期在计划的作业中执行以下 SQL ( SQL Server 2008 )。查询计划显示 53% 的成本是在从 oracle 服务器中提取数据后进行排序的。但是,我已经在 openquery 中订购了数据。合并加入时如何强制查询不排序?
merge target as t
using (select * from openquery(oracle, '
select * from t1 where UpdateTime > ''....'' order by k1, k2')
) as s on s.k1=t.k1 and s.k2=t.K2 -- the clustered PK of "target" is K1,k2
when matched then ......
when not matched then ......
有像bulk insert
'''这样的东西with (order( { column [ ASC | DESC ] } [ ,...n ] ))
吗?merge
如果存在,它会帮助改进语句的查询计划吗?
如果 oracle 表在 K1、K2 上已经有 PK,oracle.db.owner.tablename
那么作为目标使用会更好吗?(SQL Server 会从 oracle 元信息中找出索引吗?)
或者我能做的最好的是将oracle数据存储在本地临时表中并在K1,k2上创建一个集群主键?我试图避免创建临时表,因为有时返回的 openquery 数据集可能很大。