【问题标题】:How to Query Remote Database with Huge Where Clause from Local Database如何从本地数据库中使用巨大的 Where 子句查询远程数据库
【发布时间】:2012-11-14 23:19:41
【问题描述】:

我正在使用从远程数据库(remotedb、Oracle)提取的数据填充本地数据库(localdb、SQL Server)中的表。

远程数据库跨越互联网,当然,本地数据库在我的数据库服务器本地。

我需要从 remotedb 中提取数据,而为了从 remotedb 中提取数据,我只需要从特定键值(例如 remotedb 上的表上的 user_id 字段)中提取数据。

键集很大,大约。 10,000。

哦,顺便说一句,remotedb 是只读访问权限,我无权访问 imp/exp 或批处理之类的东西,也无权访问服务器(它与外部供应商合作)。

目前,我正在使用这样的查询:

SELECT
   <my data>
FROM
   <remotedb>.<remote_table> join <remotedb>.<remote_table> ...
WHERE
   <remotedb>.<remote_table>.<remote_field> in
   ( <select that returns my 20,000 IDs> )

这对我来说似乎是一个蛮力解决方案,但我想不出任何其他方法。

有人解决了这个问题吗?

【问题讨论】:

  • 这似乎是一种合理的方法。有什么明显的问题吗?例如,优化器是否选择了错误的驱动站点,强制从远程数据库获取太多数据以在本地进行连接,而不是简单地将 20,000 个 ID 发送到远程数据库并让远程数据库进行连接?此外,您已经为 SQL Server 和 Oracle 标记了这个——您使用的是哪个数据库?
  • 是否可以将您的密钥发送到 remotedb 上的程序?
  • @Justin - 我已经更新了问题,远程是 oracle,本地是 sql server。
  • @bummi 我想以某种方式将 20k ID 值传送到存储的过程中,但另一方面我没有任何过程,也没有创建过程的能力。另外,我不确定这会有什么不同?
  • @Justing 所有的连接都是带有 remotedb 表的 remotedb 表,所以我希望连接发生在 oracle 端。你认为我应该在 sql server 端把它拆下来看看优化器在做什么吗?我想我只是希望它在尝试做任何事情之前将查询“隧道”到 oracle。你怎么看?

标签: sql-server database oracle


【解决方案1】:

如果我没看错你的陈述,我们在过去的一家公司也遇到过类似的问题,这对业绩造成了影响。除非供应商可以事先为您提取所有信息并且您对此进行查询,否则我看不到其他方法。

【讨论】:

  • 昨晚我也有类似的想法,但是,供应商数据库每天都会刷新,我不确定他们是否可以从我们的数据库中提取 20k ID(我们为他们打开访问权限等)
  • 他们可以在提交视图之前从他们的系统中提取您需要的所有信息,然后您可以将视图加入一次吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多