首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询优化CASE与UNION

查询优化CASE与UNION
EN

Stack Overflow用户
提问于 2011-10-21 15:05:30
回答 2查看 1.3K关注 0票数 2

此查询从friendlist表中返回用户的好友记录,然后从user表中获取每个用户的记录。

选项#1

代码语言:javascript
复制
SELECT 
  f.status,
  f.user_to_id,
  f.user_from_id,
  u.user_id,
  u.registration_date,
  u.nickname,
  u.email
FROM ti_friend_list AS f
     LEFT JOIN ti_user u
        ON u.user_id = (CASE f.user_from_id 
                        WHEN 7 THEN f.user_to_id 
                        ELSE f.user_from_id END)
WHERE (f.user_from_id = 7
       OR f.user_to_id = 7) 

选项#2

代码语言:javascript
复制
SELECT 
  f.status,
  f.user_to_id,
  f.user_from_id,
  u.user_id,
  u.registration_date,
  u.nickname,
  u.email
FROM ti_friend_list AS f
  LEFT JOIN ti_user u
    ON u.user_id = f.user_to_id
WHERE f.user_from_id = 7
UNION ALL
SELECT 
  f.status,
  f.user_to_id,
  f.user_from_id,
  u.user_id,
  u.registration_date,
  u.nickname,
  u.email
FROM ti_friend_list AS f
  LEFT JOIN ti_user u
    ON u.user_id = f.user_from_id
WHERE f.user_to_id = 7

哪一个是更优的解决方案。CASE与UNION的基本比较

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 16:20:25

我像布莱恩一样思考:

  • 我认为对引擎来说优化union会更困难,因为你可以统一非常不同的东西!
  • UNION的问题是你必须重复查询的SELECT部分,不要出错
  • 引擎将执行UNION的第一部分,然后第二部分,然后合并。我认为有些步骤会重复两次。

您可以在查询中尝试"explain“命令,以查看引擎正在使用的计划。

票数 2
EN

Stack Overflow用户

发布于 2011-10-21 16:07:37

同时运行这两个命令,看看是否存在时差!

除此之外,我建议使用案例方法在未来的扩展意图和易用性方面是更清晰的,除非您发现明确的证据,否则我将使用它。在我的头顶上,我认为它会更快。

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

https://stackoverflow.com/questions/7846058

复制
相关文章

相似问题

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