0

我有一个远程数据库 A,它有一个视图 v_myview。我正在开发一个本地数据库,它有一个 dblink 可以访问数据库 A 上的 v_myview。如果我像这样查询视图:

select * from v_myview @ dblink ;

它返回 50 万行。我只想从视图中获取一些特定的行,例如,要获取 id=123 的行,我的查询是

select * from v_myview @ dblink where id=123; 

这按预期工作。我的问题来了,当我运行这个查询时,远程数据库会先生成 50 万行然后从那里找到 id=123 的行吗?或者远程视图首先应用我的过滤器然后查询数据库而不先检索 50 万行?我怎么知道。谢谢!

4

1 回答 1

3

Oracle 可以自由选择。您需要查看查询计划以了解过滤是在本地还是远程完成。

据推测,在您提供的这种简单的情况下,优化器希望将过滤器发送到远程服务器而不是仅通过网络拉出 50 万行来在本地过滤它们更有效。如果优化器期望未过滤的查询返回单行而不是半百万行,则该计算可能会有所不同,并且如果查询变得更加复杂,例如加入本地表或调用本地服务器上的函数,则计算可能会有所不同.

于 2013-03-20T20:50:10.283 回答