【发布时间】:2019-09-21 10:04:51
【问题描述】:
试图将数据从 Oracle 导入 SQL Server。 SQL 定义了一个链接服务器。我需要在 Oracle 端过滤数据,所以有一个 WHERE 子句根据一列(时间段)的值来限制数据。
用两种不同的方法尝试性能: 开放查询:
select * INTO T2 from OpenQuery(LinkedSrv,'select * from SCHEMA.TAB')
点表示法(LinkedServer..Schema.Table):
select * INTO T2 from LinkedSrv..SCHEMA.TAB
两者的执行速度都很慢,大约 5-6k 行/秒。对于 20M 行的表,这并不理想。然后发现了一件相当有趣的事情:
select * INTO T2 from LinkedSrv..SCHEMA.TAB WHERE col >= Value
这将吞吐量提高到近 10 万行/秒
使用 OpenQuery 指定标准不会影响整个过程。解释计划显示
RemoteQuery -> ComputeScalar -> Filter (WHERE) -> TableInsert in the dot notation scenario with WHERE.
除此之外,解释计划是相同的。那么...如何在本地添加 WHERE 子句(因为这是它的作用)将吞吐量提高 10 倍???
...在使用 OpenQuery 时,我可以做些什么来实现(期望的结果)同样的快速吞吐量?
谢谢!
【问题讨论】:
标签: sql sql-server oracle linked-server