sql - 从 SQL Server 到 Oracle 使用点表示法与 OpenQuery

标签 sql sql-server oracle linked-server

尝试将数据从 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/

相关文章:

SQL Server : Why do use SMO?

sql - Phonegap 数据库错误

sql - 计算运行总计时出错(前几个时期的累计)

mysql - .NET + MySQL(或替代的基于 SQL 的数据库)是一个不错的选择吗?

sql - 从不存在的表中选择

sql - ORA-00205 : error in identifying control file, 检查警报日志以获取更多信息

java - CallableStatement 的性能下降

mysql - 如何创建执行多个sql文件的批处理文件

sql - 连接中的条件顺序会影响查询性能吗?

mysql - 如何处理存储日期和时间的应用程序中的多个时区?