1
bosshida 2017-04-22 13:19:37 +08:00 via iPhone
增加一个字段 is_used ,用过就更新一下?
|
2
Jodal 2017-04-22 14:47:21 +08:00 via iPad 1
一个方案是增加一个 where 过滤,然后 rand 。如 select * from table_name where id > x 。下次改变 x 值。第二个方案是 redis cache 起来取每次取完 10 条后, set 删除这 10 条,下次再取 10 条。仅供参考。
|
3
mringg 2017-04-22 14:54:36 +08:00 via iPhone
分页。。。。
|
4
moult 2017-04-22 14:59:23 +08:00 1
加一个 rand_val 字段,每次插入的时候,就产生一个随机数写入。
读取的时候,也生成一个随机数作为条件进行查询 先查询 where rand_val > ? order by rand_val 如果没有结果,就查询 where rand_val < ? order by rand_val desc 也就是查询这个随机数附近的记录 读取之后,标记 rand_val=0 表示读取过了! |
5
dsg001 2017-04-22 17:22:20 +08:00 1
读取所有 id 乱序保存,使用时读取切片
|
6
rogwan OP |
7
rogwan OP |
8
ioioioioioioi 2017-04-22 20:29:34 +08:00 via iPhone
增加一个 random 字段,每小时更新
|
9
whileFalse 2017-04-22 20:50:25 +08:00
|
11
kokutou 2017-04-22 21:36:59 +08:00 via Android
那么问题来了。。。
为啥不一次取 20 条。 |
12
ghostheaven 2017-04-23 00:27:43 +08:00 via Android
取出来的放到另一张表 b 里,取的时候 left join 一下这张表,多加个判断 where b.id is null
|
13
abcbuzhiming 2017-05-10 09:02:39 +08:00
@rogwan 我跟你说你这个问题我遇到过,我们的试验结论是 mysql 在随机查询上的性能完全无法接受,从 100w 样本中抽数据速度就会掉到需要 5-6 秒的程度(机械硬盘 7200 转)。后来我们是用 redis,把数据弄到缓存里,直接用代码随机,从缓存中抽取来解决的
|
14
rogwan OP @abcbuzhiming 是的,后来我们也测试了一下,样本还没你 100w 那么多,就发现速度不行了。
|