![]() | 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 ![]() 一个方案是增加一个 where 过滤,然后 rand 。如 select * from table_name where id > x 。下次改变 x 值。第二个方案是 redis cache 起来取每次取完 10 条后, set 删除这 10 条,下次再取 10 条。仅供参考。 |
![]() | 3 ming2050 2017-04-22 14:54:36 +08:00 via iPhone 分页。。。。 |
4 moult 2017-04-22 14:59:23 +08:00 ![]() 加一个 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 ![]() 读取所有 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 那么多,就发现速度不行了。 |