Oracle10g 改进查询oracle

Oracle10g 改进查询oracle,oracle10g,Oracle10g,如何修改此查询以改进它? 我认为加入会更好 UPDATE t1 HIJA SET IND_ESTADO = 'P' WHERE IND_ESTADO = 'D' AND NOT EXISTS (SELECT COD_OPERACION FROM t1 PADRE WHERE PADRE.COD_SISTEMA_ORIGEN = HIJA.COD_SISTEMA_ORIGEN AND PADRE.COD_OPERACION = HIJA.COD_OPERACION_DEPENDIENTE) 致

如何修改此查询以改进它? 我认为加入会更好

UPDATE  t1 HIJA
SET IND_ESTADO = 'P'
WHERE IND_ESTADO = 'D'
AND NOT EXISTS
(SELECT COD_OPERACION
FROM t1 PADRE
WHERE PADRE.COD_SISTEMA_ORIGEN = HIJA.COD_SISTEMA_ORIGEN
AND PADRE.COD_OPERACION = HIJA.COD_OPERACION_DEPENDIENTE)
致以最诚挚的问候。

根据:

Oracle的优化器能够看到
不存在
不在
左连接/为空
在语义上是等价的,只要列表值声明为
非空

它对所有三种方法使用相同的执行计划,并且它们在同一时间产生相同的结果

在Oracle中,可以使用上述三种方法中的任何一种从另一个表中缺少的表中选择值

但是,如果不能保证值
不为NULL
,则应使用
左连接/为NULL
不存在
,而不是
不在
中,因为后者将根据子查询结果集中是否存在
NULL
值而产生不同的结果


所以你所拥有的已经很好了。如果性能有问题,有几个准则可以将不存在的连接重新编写为更有效的形式:

  • 在not exists和not in之间进行选择时,大多数DBA更喜欢使用not exists子句
  • 当SQL包含not in子句时,通常使用子查询,而对于not exists,则使用相关子查询
  • 在许多情况下,NOT In将生成与NOT EXISTS查询或NOT EQUERY查询相同的执行计划(!=)
  • 在某些情况下,可以使用带有NOTNULL测试的标准外部联接重新编写相关NOT EXISTS子查询
  • 一些不存在的子查询可以使用减号运算符进行优化

有关更多信息,请参阅。

从哪些方面改进??表演