尝试将数据从 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 时,我可以做些什么来实现(期望的结果)相同的快速吞吐量?
谢谢!
最佳答案
点表示法和 OpenQuery 方法之间的区别在于,前者使用客户端游标引擎,大部分内容在本地求值,而后者将查询发送到远程服务器并读取输出。
在点符号查询中过滤数据并不总是比 OpenQuery 方法更快。它基于本地和远程服务器资源。
查看以下 stackoverflow 问题,他们将为您提供更多信息:
附加信息
关于sql - 从 SQL Server 到 Oracle 使用点表示法与 OpenQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959977/