DB2 Performance CASE vs COALESCE

时间:2013-05-17 16:16:06

标签: sql db2 query-optimization case coalesce

我正在修改将一个表中的用户信息连接起来的现有语句,以便用户信息可以来自另一个表。一个是永久表,另一个是临时表(记录从一个移到另一个)。我将我的联接更改为左联接,然后离开加入第二个联系信息表。我需要选择永久字段(如果存在)和临时字段(如果永久字段不存在)。 154306是我正在选择的主表上所有传入记录的用户ID。以下是我选择字段的两个选项:

SELECT

CASE WHEN U.USRID = 154306
    THEN T.TMPFNAME
    ELSE U.FNAME
END AS FNAME,

COALESCE (U.LNAME, T.TMPLNAME) AS LNAME

FROM FILES.ORDERS O
LEFT JOIN FILES.USERS U ON U.USRID <> 154306 AND U.USRID = O.ORDUSR
LEFT JOIN FILES.TMPUSERS T ON O.ORDNUM = T.TMPORD

我认为这个案例似乎更“正确”,因为它实际上是在控制流量,但由于合并的逻辑较少,因此它的执行速度可能更快。两者都应该完成相同的结果,因为2个左连接确保我们将获得用户的信息,无论如何,但不获取仍分配给临时用户的订单的永久用户信息。看起来我们有10个字段来大小写/合并,所以我认为具有更好性能的方法是要走的路,我认为它是合并但我甚至不确定。无论出于何种原因,哪种方式更好?

1 个答案:

答案 0 :(得分:3)

casecoalesce()的性能不会对连接三个大表的查询产生影响。这些查询主要是读取和匹配表中行的时间。

顺便说一句,两者并非完全相同。如果NULL中有users.Fname个值,那么case逻辑会保留它们,但coalesce()逻辑会填充另一个表中的值。

你的标准应该是清晰的表达。因为您认为case更有意义,我建议您继续使用。