我有一个远程数据库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万行?我怎么知道。谢谢!
答案 0 :(得分:3)
Oracle也可以自由选择。您需要查看查询计划,以查看过滤是在本地还是远程完成。
据推测,在一个简单的情况下,优化器会期望将过滤器发送到远程服务器而不是通过网络拉动50万行只是为了在本地过滤它们。如果优化器期望未过滤的查询返回单行而不是50万行,那么该计算可能会有所不同,如果查询变得更复杂,可能会有所不同,例如加入本地表或调用本地服务器上的函数