SELECT userid FROM user WHERE userename =0 ORDER BY rand( ) LIMIT 30
從user表裏面隨機的取出30個ID 這個sql怎麼優化 數據庫是mysql.
這個表數據量很大 執行要9秒...
foolbirdflyfirst(龍騰虎躍)的答案:
正好,之前有看到個order by rand()的優化,老外說即使innodb引擎都有10倍提升,我測試了下,數據越多,確實有更多提升,但是10倍提升還沒測出來。你數據量大可以再幫我測試下
SELECT i.userid FROM ( SELECT @cnt := COUNT(*) + 1, @lim := 30 FROM users ) vars STRAIGHT_JOIN( SELECT r.*, @lim := @lim - 1 FROM users r WHERE (@cnt := @cnt - 1) AND RAND() < @lim / @cnt ) i
只取userid,可以再改改
SELECT i.userid FROM ( SELECT @cnt := COUNT(*) + 1, @lim := 30 FROM users ) vars STRAIGHT_JOIN( SELECT r.userid, @lim := @lim - 1 FROM users r WHERE (@cnt := @cnt - 1) AND RAND() < @lim / @cnt ) i