gpt4 book ai didi

mysql - 查询优化 CASE 与 UNION

转载 作者:行者123 更新时间:2023-11-29 02:34:14 26 4
gpt4 key购买 nike

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

选项#1

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

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的比较

最佳答案

我的想法和 Brian 一样:

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

您可以在查询中尝试“解释”命令以查看引擎正在使用的计划。

关于mysql - 查询优化 CASE 与 UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com