现在数据需求很大,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 1
rand 我们都是在程序里生成的,这几乎成了常识……
|
3
ericls 2016-10-07 10:00:34 +08:00 1
楼上正解,随机的 ID 要先在程序里面生成,再查询
|
4
Immortal 2016-10-07 10:04:01 +08:00 1
能用代码解决的问题不要放到数据库...这个的确是常识
|
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
我自己用的时候一般都是拆分成了多次单表查询然后开缓存,对于热门数据速度还是可以的。
压力大不大试过才知道,没做的时候总想着分库分表什么的,其实可能用不到。 |