尝试将数据从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时我该怎么做才能达到(预期的结果)相同的快速吞吐量?
谢谢!
答案 0 :(得分:0)
点表示法和OpenQuery方法之间的区别在于,第一种使用客户端游标引擎,大多数事物在本地进行评估,而第二种将查询发送到远程服务器并读取输出。
与OpenQuery相比,并非总是在点表示法查询中过滤数据更快。它基于每个本地和远程服务器资源。
查看以下stackoverflow问题,它们将为您提供更多信息:
其他信息