2017-04-18 105 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