
现在数据需求很大,rand 后查询速度是 0.5 秒的速度 可是查询量大了后明显变慢。
我现在是使用了 Redis ,可是跑挂是时常存在的,该如何彻底解决 rand 与 cache 共存高性能化呢。
环境:nginx Mysql5.7 Redis , session ( memcached) ,
1 cdwyd 2016-10-07 08:30:10 +08:00 via Android id 连续的话,先生成 id 然后取数据 |
2 loading 2016-10-07 09:32:20 +08:00 via Android rand 我们都是在程序里生成的,这几乎成了常识…… |
3 ericls 2016-10-07 10:00:34 +08:00 楼上正解,随机的 ID 要先在程序里面生成,再查询 |
4 Immortal 2016-10-07 10:04:01 +08:00 能用代码解决的问题不要放到数据库...这个的确是常识 |
5 mokeyjay 2016-10-07 17:10:08 +08:00 via Android 不是都说 mysql 的 rand 效率很低嘛 |
6 rqrq 2016-10-07 22:45:58 +08:00 今天也折腾了下,普通的就用自增 id 1-max 随机取出一个数字,然后取 id >= 随机数字 LIMIT 1 就行了 参考: http://www.drupal001.com/2012/01/solution_for_mysql_random_results/ |
7 xjroot OP |
8 cdwyd 2016-10-07 23:20:51 +08:00 via Android 大概有 3000 万数据,随机生成 1000 个 id ,然后用的 where id in 速度挺快的( 2g 内存的 vps ) |
13 cdwyd 2016-10-08 09:17:32 +08:00 via Android 我自己用的时候一般都是拆分成了多次单表查询然后开缓存,对于热门数据速度还是可以的。 压力大不大试过才知道,没做的时候总想着分库分表什么的,其实可能用不到。 |