通过用UNION替换OR来提高SQL查询的性能

时间:2017-04-18 12:35:42

标签: sql db2 union clause

为了提高以下查询的性能,我们必须删除OR子句并使用UNION。 OR子句不允许考虑索引,这就是我们需要使用UNION的原因。请告诉我是否有其他更好的方法来改善此查询的性能并避免使用OR子句?

        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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以上是正确的。但我想知道在没有使用UNION

的情况下是否还有其他方法可以做到这一点