我有一个像这样的 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?
但是我正在使用内部联接,所以这个问题对我没有帮助。
最佳答案
首先从用户
中随机选择27个用户名
,考虑到以下限制:
WHERE `users`.`offline_status` = 0
AND `users`.`perma_ban` = 0
AND `users`.`is_premium` = 1
那么你就快完成了。 onlines
几乎没有为查询提供任何内容;它所做的只是消除任何未出现在在线
中的用户名。所以只需添加
AND NOT EXISTS ( SELECT * FROM onlines WHERE username = users.username )
然后转到提到的链接,或my blog ,其扩展性更好。它提供了 5 个有效的答案。但如果不回答更多问题,我无法告诉您哪个答案最适合您的情况。
关于mysql - 通过内连接优化 rand 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120906/