繁体   English   中英

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

[英]Using dot notation vs OpenQuery from SQL Server to Oracle

试图将数据从 Oracle 引入 SQL Server。 SQL 定义了一个链接服务器。 我需要在 Oracle 端过滤掉数据,所以有一个 WHERE 子句根据一列(时间段)的值来限制数据。

使用两种不同的方法尝试性能:OpenQuery:

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

这将吞吐量推高至近 100k 行/秒

使用 OpenQuery 指定标准不会影响整个过程。 解释计划显示

RemoteQuery -> ComputeScalar -> Filter (WHERE) -> TableInsert in the dot notation scenario with WHERE.

除此之外,解释计划是相同的。 那么......如何在本地添加一个 WHERE 子句(因为这是它所做的)将吞吐量提高 10 倍???

...在使用 OpenQuery 时,我该怎么做才能实现(预期的结果)相同的快速吞吐量?

谢谢!

点表示法和 OpenQuery 方法之间的区别在于,第一个使用客户端游标引擎,并且大多数事情在本地进行评估,而第二个将 Query 发送到远程服务器并读取输出。

OpenQuery 方法并不总是在点符号查询中过滤数据更快。 它基于每个本地和远程服务器资源。

查看以下stackoverflow问题,他们将为您提供更多信息:

附加信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM