正在尝试将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时,我可以做些什么来实现(期望的结果)相同的快速吞吐量?
谢谢!
发布于 2019-05-03 05:30:52
点表示法和OpenQuery方法之间的不同之处在于,前者使用客户端游标引擎,大多数内容都是在本地计算的,而后者将查询发送到远程服务器并读取输出。
与OpenQuery方法相比,在点符号查询中过滤数据并不总是更快。它是基于每个本地和远程服务器的资源。
查看下面的堆栈溢出问题,他们将为您提供更多信息:
附加信息
https://stackoverflow.com/questions/55959977
复制相似问题