У меня есть SQL запрос следующим образом:Оптимизация производительности рант с внутренним соединением
SELECT `users`.`name`, `users`.`username`, `users`.`bio`, `users`.`city`, `users`.`photo`
FROM (`onlines`) JOIN `users`
ON `onlines`.`username`=`users`.`username`
WHERE `users`.`offline_status` = 0
AND `users`.`perma_ban` = 0
AND `users`.`is_premium` = 1
GROUP BY `onlines`.`username`
ORDER BY RAND() LIMIT 27
Я использую RAND, но я не доволен производительностью. Как я могу оптимизировать этот запрос?
Я прочитал это:
How can i optimize MySQL's ORDER BY RAND() function?
Но я использую внутреннее соединение, так что этот вопрос не помог мне.
У меня 350K записей в таблице пользователей и приблизительно 1k в таблице onlines. Получение 27 случайных имен пользователей из таблицы пользователей имеет смысл? Что Вы думаете об этом? –
Это становится беспорядочным - вам либо нужно получить 27 из 1K плюс проверить 3 флажка, либо получить 27 из 350K плюс проверить, что они в сети. В любом случае вам, возможно, придется искать намного больше, чем 27, прежде чем критерии будут выполнены. Соответствует ли «offline_status» существованию в 'onlines'? Это может упростить запрос _a lot_. –
Давайте сделаем шаг назад - Какова цель 27? Может быть, мы сможем подстроить цель, чтобы быть чем-то более легко достигнутым. –