【发布时间】:2021-10-06 05:45:53
【问题描述】:
我正在用 C# 编写一个应用程序,它将针对本地和链接数据库(所有 Oracle 10g 和更高版本)执行查询,并且我想确保我了解在查询链接数据库时谁在做什么。
例如,对于一个简单的查询,例如
SELECT * FROM FOO@DB_LINK
本地数据库服务器负责什么?我假设这将使用托管DB_LINK的数据库服务器上的CPU、磁盘和内存,但是这个查询对本地数据库服务器资源有什么影响呢?
如果查询稍微复杂一点怎么办,比如
SELECT * FROM FOO@DB_LINK F INNER JOIN BAR@DB_LINK B ON F.FOOBAR = B.FOOBAR
整个查询是在托管DB_LINK 的服务器上执行的,还是INNER JOIN 是在本地服务器上执行的?如果INNER JOIN 由本地数据库执行,它是否能够利用链接表上的索引(我不这么认为)?有没有办法告诉 Oracle 在链接数据库上执行整个查询?
在我的应用程序中,我的查询将始终完全针对本地数据库或选定的链接数据库。换句话说,我永远不会同时从本地和链接数据库中获取数据的查询,例如
SELECT * FROM FOO F INNER JOIN BAR@DB_LINK B ON F.FOOBAR = B.FOOBAR
总结一下,
- 我只处理 Oracle 10g 或更新的数据库。
- 当查询(无论多么复杂)严格针对链接表时,本地数据库服务器负责什么?
- 有哪些方法(如果有)可以优化或向 Oracle 提供有关如何最好地执行此类查询的提示? (C# 中的示例会很棒)
【问题讨论】:
-
Oracle 数据库管理员指南在Chapter 32.4 Tuning Distributed Queries 中谈到了这一点
-
感谢@kfinity,但是文档的范围是“本地 Oracle 数据库服务器将分布式查询分解为相应数量的远程查询,然后将其发送到远程节点执行。远程节点执行查询并将结果发送回本地节点。本地节点然后执行任何必要的后处理并将结果返回给用户或应用程序。 Oracle 如何确定将分布式查询分解为远程查询的位置?是否足够聪明地确定可以完全传递针对所有远程对象的查询?
标签: oracle performance hyperlink resources