2017-04-18 38 views
0

要提高以下查询的性能,我们必须删除OR子句并使用UNION。 OR子句不允许考虑索引,这就是我们为什么需要使用UNION的原因。请让我知道是否有其他更好的方法来提高此查询的性能并避免使用OR子句?通过用UNION替换OR来提高SQL查询的性能

 SELECT *      
      FROM A 
      LEFT OUTER JOIN B 
       ON A.NBR_CH = B.NBR_CH 
      LEFT OUTER JOIN C 
       ON B.ID = C.ID     
      WHERE A.LIS IN (:IdList) 
       AND ((C.TYP_C = :Type 
       AND C.R_NBR LIKE :rNbr) 
       OR (A.R_NBR LIKE :rNbr))   
      WITH UR 
+2

什么是'WITH UR'? –

+0

@GordonLinoff WITH WITH {RR | RS | CS | UR}指示计划以指定的隔离级别进行编译,在这种情况下为未提交的读取。 – mustaccio

+0

什么平台和版本?你为什么认为OR会阻止索引使用? – Charles

回答

0

会是这样吗?

SELECT *      
      FROM A 
      LEFT OUTER JOIN B 
       ON A.NBR_CH = B.NBR_CH 
      LEFT OUTER JOIN C 
       ON B.ID = C.ID     
      WHERE A.LIS IN (:IdList) 
       AND ((C.TYP_C = :Type 
       AND C.R_NBR LIKE :rNbr))   
      WITH UR 
    UNION 

SELECT *      
      FROM A 
      LEFT OUTER JOIN B 
       ON A.NBR_CH = B.NBR_CH 
      LEFT OUTER JOIN C 
       ON B.ID = C.ID     
      WHERE A.LIS IN (:IdList) 
       AND A.R_NBR LIKE :rNbr  
      WITH UR 
0

以上是正确的。但我想知道是否有其他方法可以不使用UNION