ArtmirArtИндексами на `user_id`
А так нужно смотреть EXPLAIN запроса.
Не совсем понятно, зачем отдельно таблицы для блокировки и удаления.
P.S. Можно ещё красиво сделать :)
SELECT
U.id, U.name, U.birthday, U.sex, U.city, U.status, U.regdate
FROM
`users` U
INNER JOIN
`shipping` SA ON SA.user_id = U.id
INNER JOIN
`activity` A ON
A.user_id = U.id and
A.last_activity_at > 1553260577
LEFT JOIN
`blocked` B ON B.user_id = U.id
LEFT JOIN
`deleted` D ON D.user_id = U.id
WHERE
B.id is NULL and
D.id is NULL and
U.id NOT IN (
( SELECT who_id FROM `blacklist` WHERE user_id = 17 )
UNION
( SELECT user_id FROM `blacklist` WHERE who_id = 17 )
UNION
( SELECT 17 )
)
GROUP BY
U.id
ORDER BY
U.id DESC
LIMIT
1
OFFSET
3