Есть три MySQL таблицы, все InnoDB:
users:
— id (index)
friend_requests:
— user1 (index)
— user2 (index)
friend_data:
— user1 (index)
— user2 (index)
Есть 50 000 фейковых пользователей, нужно нагенерировать по 10 запросов в друзья и по 10 дружб для каждого пользоватля с другими рандомными пользователями.
Подскажите, пожалуйста, быструю выборку для получения случайного пользователя, у которого еще нет связей в таблицах friend_requests и friend_data. Сейчас используется этот запрос, но он работает уж слишком медленно.
SELECT
u.id
FROM
users AS u
LEFT JOIN friend_data AS f ON u.id IN (f.user1, f.user2) AND $ID IN (f.user1, f.user2)
LEFT JOIN friend_requests AS fr ON u.id IN (fr.user1, fr.user2) AND $ID IN (fr.user1, fr.user2)
WHERE
(f.id IS NULL)
AND
(fr.id IS NULL)
AND
u.id <> $ID
ORDER BY RAND()
LIMIT 1
Если использовать случайный OFFSET вместо ORDER BY RAND(), то запрос работает немножечко быстрее, но все равно больше 5 секунд, что, увы, слишком медленно.
$ID это пользователь, с которым сравниваю.