首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2性能案例与合并

DB2性能案例与合并
EN

Stack Overflow用户
提问于 2013-05-18 00:16:06
回答 1查看 8.3K关注 0票数 1

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

代码语言:javascript
复制
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

我认为这种情况看起来更“正确”,因为它实际上是在控制流程,但由于coalesce遵循的逻辑较少,它可能会执行得更快。任何一个都应该实现相同的结果,因为两个左连接确保我们无论如何都会获得用户的信息,但不会获得仍然分配给临时用户的订单的永久用户信息。看起来我们有10个字段要合并,所以我认为性能更好的方法是可行的,我认为是合并,但我甚至不确定这一点。出于任何原因,哪一种方式更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-18 01:25:04

对于连接三个大表的查询,casecoalesce()的性能不会有什么不同。这样的查询主要取决于读取和匹配表中的行的时间。

顺便说一句,这两者并不完全相同。如果您在users.Fname中有NULL值,那么case逻辑将保留这些值,但是coalesce()逻辑将填充来自另一个表的值。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16613689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档