In case you have your own slow SQL query, you can optimize it automatically here.
For the query above, the following recommendations will be helpful as part of the SQL tuning process.
You'll find 3 sections below:
SELECT
username,
uid,
email,
ui_gender,
ui_country,
ui_birthday,
is_online,
p_thumb_url,
sr_id,
st_love,
age
FROM
((SELECT
DISTINCT username AS username,
user.id AS uid,
email AS email,
ui.gender AS ui_gender,
ui.country AS ui_country,
ui.birthday AS ui_birthday,
IF(last_activity_date >= now() - INTERVAL 1 HOUR,
1,
0) AS is_online,
p.thumb_url AS p_thumb_url,
friend_request.id AS sr_id,
IF(ul.id IS NOT NULL,
1,
0) AS st_love,
DATE_FORMAT(NOW(),
'%Y') - DATE_FORMAT(ui.birthday,
'%Y') - (DATE_FORMAT(NOW(),
'00-%m-%d') < DATE_FORMAT(ui.birthday,
'00-%m-%d')) AS age
FROM
friend_request
JOIN
user
ON (
user.`id` = friend_request.`from_user_id`
)
AND user.`id` != '$user_id'
AND friend_request.`status` = '1'
JOIN
user_info ui
ON user.`id` = ui.`user_id`
JOIN
photo p
ON ui.`main_photo` = p.`id`
LEFT JOIN
user_love ul
ON ul.`to_user_id` = user.`id`
AND ul.`from_user_id` = $user_id
WHERE
(
friend_request.`from_user_id` = '$user_id'
)
ORDER BY
friend_request.id DESC LIMIT 30)
UNION
DISTINCT (SELECT
DISTINCT username AS username,
user.id AS uid,
email AS email,
ui.gender AS ui_gender,
ui.country AS ui_country,
ui.birthday AS ui_birthday,
IF(last_activity_date >= now() - INTERVAL 1 HOUR,
1,
0) AS is_online,
p.thumb_url AS p_thumb_url,
friend_request.id AS sr_id,
IF(ul.id IS NOT NULL,
1,
0) AS st_love,
DATE_FORMAT(NOW(),
'%Y') - DATE_FORMAT(ui.birthday,
'%Y') - (DATE_FORMAT(NOW(),
'00-%m-%d') < DATE_FORMAT(ui.birthday,
'00-%m-%d')) AS age
FROM
friend_request
JOIN
user
ON (user.`id` = friend_request.`from_user_id`)
AND user.`id` != '$user_id'
AND friend_request.`status` = '1'
JOIN
user_info ui
ON user.`id` = ui.`user_id`
JOIN
photo p
ON ui.`main_photo` = p.`id`
LEFT JOIN
user_love ul
ON ul.`to_user_id` = user.`id`
AND ul.`from_user_id` = $user_id
WHERE
(friend_request.`to_user_id` = '$user_id')
ORDER BY
friend_request.id DESC LIMIT 30)
UNION
DISTINCT (SELECT
DISTINCT username AS username,
user.id AS uid,
email AS email,
ui.gender AS ui_gender,
ui.country AS ui_country,
ui.birthday AS ui_birthday,
IF(last_activity_date >= now() - INTERVAL 1 HOUR,
1,
0) AS is_online,
p.thumb_url AS p_thumb_url,
friend_request.id AS sr_id,
IF(ul.id IS NOT NULL,
1,
0) AS st_love,
DATE_FORMAT(NOW(),
'%Y') - DATE_FORMAT(ui.birthday,
'%Y') - (DATE_FORMAT(NOW(),
'00-%m-%d') < DATE_FORMAT(ui.birthday,
'00-%m-%d')) AS age
FROM
friend_request
JOIN
user
ON (user.`id` = friend_request.`to_user_id`)
AND user.`id` != '$user_id'
AND friend_request.`status` = '1'
JOIN
user_info ui
ON user.`id` = ui.`user_id`
JOIN
photo p
ON ui.`main_photo` = p.`id`
LEFT JOIN
user_love ul
ON ul.`to_user_id` = user.`id`
AND ul.`from_user_id` = $user_id
WHERE
(friend_request.`from_user_id` = '$user_id')
ORDER BY
friend_request.id DESC LIMIT 30)
UNION
DISTINCT (SELECT
DISTINCT username AS username,
user.id AS uid,
email AS email,
ui.gender AS ui_gender,
ui.country AS ui_country,
ui.birthday AS ui_birthday,
IF(last_activity_date >= now() - INTERVAL 1 HOUR,
1,
0) AS is_online,
p.thumb_url AS p_thumb_url,
friend_request.id AS sr_id,
IF(ul.id IS NOT NULL,
1,
0) AS st_love,
DATE_FORMAT(NOW(),
'%Y') - DATE_FORMAT(ui.birthday,
'%Y') - (DATE_FORMAT(NOW(),
'00-%m-%d') < DATE_FORMAT(ui.birthday,
'00-%m-%d')) AS age
FROM
friend_request
JOIN
user
ON (user.`id` = friend_request.`to_user_id`)
AND user.`id` != '$user_id'
AND friend_request.`status` = '1'
JOIN
user_info ui
ON user.`id` = ui.`user_id`
JOIN
photo p
ON ui.`main_photo` = p.`id`
LEFT JOIN
user_love ul
ON ul.`to_user_id` = user.`id`
AND ul.`from_user_id` = $user_id
WHERE
(friend_request.`to_user_id` = '$user_id')
ORDER BY
friend_request.id DESC LIMIT 30)
) AS union1
ORDER BY
union1.sr_id DESC LIMIT 30