1
ksc010 2014-02-25 21:17:42 +08:00 2
你可以随机生成几个 id
然后 select * from stock where id in(10000,1200,...) |
2
KiseXu 2014-02-25 21:19:06 +08:00 1
先取得id的max值,然后从1到最大值(如果id是连续的话)间随机出几个id,然后直接到mysql里读这几个id的记录就行
|
3
cevincheung 2014-02-25 21:36:42 +08:00 1
id表里随机出id。然后用id去where in
id表是“随机”而不是随机。 随机从某个id开始limit 几条连续数据 |
4
Ever 2014-02-25 21:43:33 +08:00 2
id同步进redis sets, 取srandmember
|
5
czheo 2014-02-25 21:52:18 +08:00 via iPhone 1
先取总数
SELECT COUNT(*) AS cnt FROM quotes 然后生成小于总数的随机数 SELECT quote FROM quotes LIMIT $generated_number, 1 |
6
flytwokites 2014-02-25 22:12:53 +08:00 1
标准做法是在表里加一个int列,设置成随机值,然后按这个值排序(还要做好索引)
然后按业务需要按适当的间隔时间更新这个列。 |
7
pubby 2014-02-25 22:34:32 +08:00 1
@flytwokites 更新太频繁会降低mysql的缓存的命中率
|
8
flytwokites 2014-02-25 22:47:11 +08:00 1
@pubby 按业务需要啊,比如要每天更新的话放在半夜更新一次就行了。
|
9
vibbow 2014-02-25 23:17:50 +08:00 1
MYSQL完全可以专门对ORDER BY RAND()做优化的,可是他没有,LZ知道该去哪里提意见了么?
|
10
avalon 2014-02-25 23:25:35 +08:00 1
|
11
zhy0216 2014-02-26 10:22:58 +08:00 1
只取一个的话, 知道id的范围, 在外部随机生成一个id(rand_id), 然后id=rand_id
|
12
miao OP 感谢各位, 每人送出了 10-5 =5 分
@ksc010 @KiseXu @cevincheung @Ever @czheo @flytwokites @pubby @flytwokites @vibbow @avalon @zhy0216 |
13
ccnccy 2014-03-09 00:30:02 +08:00 via iPhone
之前研究过,想随机文章,但是文章太多,几十万。
就像上面说的,随机几个数字出来,再输出吧,快几万倍 或者用缓存插件 |