- 主题:从数据库里随机抽出几个人的资料怎么做快
slowquery 慢查询里都是
select id from tabelname order by rand() limit 10;
消耗时间都是几秒
如何优化?
--
FROM 211.99.222.*
rand在客户端做,得到随机的数后再根据id查
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: slowquery 慢查询里都是
: select id from tabelname order by rand() limit 10;
: 消耗时间都是几秒
: ...................
--
FROM 123.127.89.*
慢的是order by而不是随机吧
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: slowquery 慢查询里都是
: select id from tabelname order by rand() limit 10;
: 消耗时间都是几秒
: ...................
--
FROM 123.127.65.*
我有个主意。数据库里加个字段,存随机整数,写入的时候存。
需要读的时候在客户端随机一个不算太小的整数N
然后select xx where rndfield<N limit 20;
再从中随机交换一下,得出10个来
如果再有一个job定期更新数据库里的随机数字段就更好了
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: 标 题: 从数据库里随机抽出几个人的资料怎么做快
: 发信站: 水木社区 (Thu Feb 4 12:47:02 2010), 站内
:
: slowquery 慢查询里都是
: select id from tabelname order by rand() limit 10;
: 消耗时间都是几秒
: 如何优化?
: --
: 一个只知道所谓互联网精神的公司,会死的很难看,尤其是在那些还没有长成人形的公司!
: 1. Everything changes and ends. 所有的事情在变化,都有终结
: 2. Things do not always go according to plan. 事情总会出乎意料(计划)之外
: 3. Life is not always fair. 生活并不总是公平
: 4. Pain is part of life. 痛苦是生活的一部分
: 5. People are not loving and loyal all the time. 人们并不总是热爱和忠诚
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]
--
FROM 218.247.11.*
是的,就是 order by rand() 要做个临时表
24万的数据量,还不到百万就这么慢了
【 在 kobe2000 (老天爷饿不死瞎家雀儿) 的大作中提到: 】
: 慢的是order by而不是随机吧
--
FROM 211.99.222.*
可不可以 将Id 与随机数 做个简单的映射,
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: 是的,就是 order by rand() 要做个临时表
: 24万的数据量,还不到百万就这么慢了
--
FROM 61.49.33.*
正解
【 在 GAE (练车终于结束了) 的大作中提到: 】
: rand在客户端做,得到随机的数后再根据id查
--
FROM 202.106.68.*
现在有个解决方案了,看看有何 Bug。会不会在前面的出现的概率高
$count= select count(*) from table;
$limit= 10;
select id,floor(rand()*$count) as r from table where floor(rand()*$count) < $limit * 2 order by r limit $limit;
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: 是的,就是 order by rand() 要做个临时表
: 24万的数据量,还不到百万就这么慢了
--
FROM 211.99.222.*