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

时间:2019-05-02 20:43:12

标签: sql sql-server oracle linked-server

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

这将吞吐量提高到近10万行/秒

使用OpenQuery指定条件不会影响整个过程。解释计划展示

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

除此之外,说明计划是相同的。所以...如何在本地添加WHERE子句(因为它在此处执行)将吞吐量提高了10倍?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

与OpenQuery相比,并非总是在点表示法查询中过滤数据更快。它基于每个本地和远程服务器资源。

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

其他信息