mysql union 慢查询_慢UNION查询 – MySQL

我有一个UNION查询,包含两个快速查询.

( SELECT DISTINCT ( SELECT strStatus FROM User_User_XR uuxr WHERE

( uuxr.intUserId1 = '1' AND uuxr.intUserId2 = u.intUserId ) ) AS strFriendStatus1,

uuxro.strStatus AS strFriendStatus2, uuxr.intUserId2 AS intUserId, u.strUserName ,

u.strGender, IF( u.dtmBirth != '0000-00-00', FLOOR(DATEDIFF(CURDATE(),

u.dtmBirth) / 365.25) , '?') AS intAge, u.strCountry AS strCountryCode,

c.strCountry AS strCountry, u.strAvatar, u.fltPoints,

IF( o.intUserId IS NULL, 'offline', 'online' ) AS strOnline,

IF ( u.strAvatar != '', CONCAT( 'avatars/60/', u.strAvatar ),

CONCAT( 'images/avatar_', u.strGender, '_small.png' ) ) as strAvatar,

IF ( u.strAvatar != '', CONCAT( 'avatars/150/', u.strAvatar ),

CONCAT( 'images/avatar_', u.strGender, '.png' )) as strLargeAvatar,

u.dtmLastLogin, u.dtmRegistered FROM User_User_XR uuxr,

User u LEFT JOIN User_User_XR uuxro ON uuxro.intUserId2 = '1'

AND uuxro.intUserId1 = u.intUserId

LEFT JOIN Online o ON o.intUserId = u.intUserId

LEFT JOIN Country c ON c.strCountryCode = u.strCountry

WHERE u.intUserId = uuxr.intUserId2 AND ( uuxr.strStatus = 'confirmed' )

AND uuxr.intUserId1='1' )

UNION

( SELECT DISTINCT ( SELECT strStatus FROM User_User_XR uuxr

WHERE ( uuxr.intUserId1 = '1' AND uuxr.intUserId2 = u.intUserId ) ) AS strFriendStatus1,

uuxro.strStatus AS strFriendStatus2, uuxr.intUserId1 AS intUserId, u.strUserName ,

u.strGender, IF( u.dtmBirth != '0000-00-00', FLOOR(DATEDIFF(CURDATE(),

u.dtmBirth) / 365.25) , '?') AS intAge,

u.strCountry AS strCountryCode, c.strCountry AS strCountry, u.strAvatar, u.fltPoints,

IF( o.intUserId IS NULL, 'offline', 'online' ) AS strOnline,

IF ( u.strAvatar != '', CONCAT( 'avatars/60/', u.strAvatar ),

CONCAT( 'images/avatar_', u.strGender, '_small.png' ) ) as strAvatar,

IF ( u.strAvatar != '', CONCAT( 'avatars/150/', u.strAvatar ),

CONCAT( 'images/avatar_', u.strGender, '.png' )) as strLargeAvatar,

u.dtmLastLogin, u.dtmRegistered FROM User_User_XR uuxr, User u

LEFT JOIN User_User_XR uuxro ON uuxro.intUserId2 = '1'

AND uuxro.intUserId1 = u.intUserId

LEFT JOIN Online o ON o.intUserId = u.intUserId

LEFT JOIN Country c ON c.strCountryCode = u.strCountry

WHERE u.intUserId = uuxr.intUserId1 AND ( uuxr.strStatus = 'confirmed' )

AND uuxr.intUserId2='1' )

第一个查询以0.0047s运行

第二次运行0.0043s

然而,在联盟,他们运行0.27s …这是为什么?在UNION之后没有Order By,为什么MySQL不会简单地采用两个快速查询并将它们连接起来?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值