두 개의 빠른 쿼리로 구성된 UNION 쿼리가 있습니다. 쿼리의느린 UNION 쿼리 - MySQL
(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.27s를 실행 연합과, 그러나
0.0043s에서 실행 ...이 왜? UNION 다음에는 Order By가 없습니다. 왜 MySQL이 두 개의 빠른 쿼리를 가져 와서 연결하지 않을까요?
UNION ALL은 그것을 0.17s로 줄였습니다. 그것은 뭔가를했지만 아직도 너무 느립니다 : (.. 대답을 주셔서 감사합니다 :) – Armin