oracle 跨数据关联查询

在我们使用dblink连接远程数据库做关联查询时容易出现查询速度慢的问题,主要是因为当做远程关联查询时会出现全表扫描索引失效的问题。

解决办法

  使用执行计划 driving_site 比如A库中表 t1 关联B库中的表t2 其中B库中T2表数据量很大并建有索引,现在在A库中要远程通过DBlink访问B库中的表T2做关联查询,如果不做任何处理 直接关联查询这样就会照成B库中的T2表全表扫描索引失效

这时可以通过driving_site强制指定主驱动表,即以所指定的表为主要表,将其它表作为从表提取到驱动表所在的库进行关联运算。具体语句如下:

    select /*+driving_site(main)*/  a.*,b.* from A.a main@BigTableDB,B.b minor where main.id=minor.id and .......
  这样一来就可以避免大表所在库的全表扫描,查询速度将成级数级提高。
解释:
当指定 /*+driving_site(main)*/ 时, oracle将会从minor表获取全部数据到main表所在的数据库来进行关联运算.(索引起作用,速度快)
若指定 /*+driving_site(minor)*/ 时, oracle将会从main表获取全部数据到minor表所在的数据库来进行关联运算.(索引失败,全表扫描)

  

你可能感兴趣的:(oracle 跨数据关联查询)