通过替换或使用UNION提高SQL查询的性能
为了提高以下查询的性能,我们必须删除OR子句并使用UNION。OR子句不允许考虑索引,这就是为什么我们需要使用UNION。请告诉我是否有其他更好的方法来提高此查询的性能并避免使用OR子句通过替换或使用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
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出现之前几十年就有了这种语法。