如何优化复杂的分布式查询?

时间:2016-10-21 05:57:06

标签: sql database oracle cursor remote-server

我的包中有一个使用远程数据库链接的游标。 我想优化包的性能。 所以我想从优化光标开始。

我会提供一些分析信息,

  • 查询中没有本地表,只有远程数据库链接。
  • Cursor Query使用6个远程DB链接并执行连接操作 在他们身上。
  • 所有DBlink都指向相同的DB但不同的表。
  • SELECT没有任何聚合操作,只有NVL 几列的功能
  • 正在选择约90列

查询的结构是

SELECT (SOME 90 COLUMNS)
FROM    master1_all@db_one m1,
        master2_all@db_one m2,
        prey1@db_one pa,
        prey2@db_one pb,
        prey2@db_one pc,
        tbl_abc@db_one xa,
    (SELECT
      geo.country,
      geo.state
    FROM  tb_dest@db_one geo ) geo  WHERE ( m1.master_key = m2.master_key ) AND
    ( pc.weather_key = m2.cloud_key ) AND
( m1.order_type_id = pa.weather_key ) AND
( pa.weather_key = pb.weather_key ) AND
( m2.food_store_key = xa.food_store_key ) AND
( (nvl(m2.shop_key ,121)) = xa.store_key ) AND
( geo.country (+) = m1.country ) AND
(xa.food_type NOT IN ('COLD')) AND
( m2.food_type_code NOT IN ('WINTER')
    OR m2.price_per_portion !=0 ) AND
( ( m1.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m1.last_purchase_date <= TRUNC(SYSDATE) ) 
Or ( m2.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m2.last_purchase_date <= TRUNC(SYSDATE) ));

这不是实际查询,但结构类似。

1 个答案:

答案 0 :(得分:1)

首先尝试找一个你查询的瓶颈。 如果仅从远程表执行查询时出现问题 你可以使用提示/ * + DRIVING_SITE(...)* / https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements006.htm#BABEGIJC oracle将尝试在remoute数据库上执行