调整下面的Sql查询

时间:2012-12-18 12:21:17

标签: oracle database-performance performance

我有一个旧版Oracle 8.1.7的数据库,我一直在运行以下的Union查询

select c_ordine_es
         ,c_ordine_salesnet
         ,v_oyov
         ,v_annuale
         ,v_oneoff
         ,v_canone
         ,c_operatore_tam
     from v_ordine_cliente_easysell

    where d_ultima_modifica>DataRif
    union
   select c_ordine_es
         ,c_ordine_salesnet
         ,v_oyov
         ,v_annuale
         ,v_oneoff
         ,v_canone
         ,c_operatore_tam
     from v_ordine_cliente_easysell v
         ,scarti_interfaccia_easysell_o s
    where s.c_codice_es=v.c_ordine_es
      and s.t_tabella_es=pkType.K_SCARTO_ORDINE_CLIENTE;

每次运行这些查询时,SQL客户端(我使用的是Toad)都会挂起。在这里,我必须提到v_ordine_cliente_easysellscarti_interfaccia_easysell_o中的数据,这两个视图/同义词是使用DB Link(到另一个SIEBEL DB)获取的。我猜这个问题是在通过DB_LINK获取数据时发生的,因为SIEBEL DB非常繁忙。你能建议我怎么调整上面的查询?

解释计划如下所示

OPERATION          OPTIONS  OBJECT_NODE POSITION    COST    CARDINALITY BYTES
SELECT STATEMENT            28  28  478912  61779648
HASH JOIN           1   28  478912  61779648
INDEX   FAST FULL SCAN      1   2   11354   102186
REMOTE      SIEB.WORLD  2   23  4218    506160

1 个答案:

答案 0 :(得分:0)

  1. 制作表格v_ordine_cliente_easysell的本地副本。
  2. 制作过滤后的表格scarti_interfaccia_easysell_o的本地副本 t_tabella_es=pkType.K_SCARTO_ORDINE_CLIENTE
  3. 在本地副本上运行查询,但使用UNION ALL