Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过替换或使用UNION提高SQL查询的性能_Sql_Db2_Union_Clause - Fatal编程技术网

通过替换或使用UNION提高SQL查询的性能

通过替换或使用UNION提高SQL查询的性能,sql,db2,union,clause,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

为了提高以下查询的性能,我们必须删除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
会是这样吗

 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

以上是正确的。但是我想知道,如果不使用UNION,是否还有其他方法可以做到这一点

UR的
是什么?@GordonLinoff
和{RR | RS | CS | UR}
指示使用指定的隔离级别编译计划,在这种情况下是未提交读取。什么平台和版本?你认为OR为什么会阻止索引的使用?@mustaccio。非常感谢。鉴于
with
适用于CTE,因此使用
with
似乎很愚蠢。但是IBM几乎发明了SQL,所以他们可能在CTEs出现之前几十年就有了这种语法。