现在 MySQL Rand(1,5W) 速度都很慢, 该如何优化呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
xjroot
V2EX    MySQL

现在 MySQL Rand(1,5W) 速度都很慢, 该如何优化呢

  •  
  •   xjroot 2016-10-07 08:11:39 +08:00 5078 次点击
    这是一个创建于 3369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在数据需求很大,rand 后查询速度是 0.5 秒的速度 可是查询量大了后明显变慢。

    我现在是使用了 Redis ,可是跑挂是时常存在的,该如何彻底解决 rand 与 cache 共存高性能化呢。

    环境:nginx Mysql5.7 Redis , session ( memcached) ,

    14 条回复    2016-11-11 02:03:10 +08:00
    cdwyd
        1
    cdwyd  
       2016-10-07 08:30:10 +08:00 via Android
    id 连续的话,先生成 id 然后取数据
    loading
        2
    loading  
       2016-10-07 09:32:20 +08:00 via Android   1
    rand 我们都是在程序里生成的,这几乎成了常识……
    ericls
        3
    ericls  
       2016-10-07 10:00:34 +08:00   1
    楼上正解,随机的 ID 要先在程序里面生成,再查询
    Immortal
        4
    Immortal  
       2016-10-07 10:04:01 +08:00   1
    能用代码解决的问题不要放到数据库...这个的确是常识
    mokeyjay
        5
    mokeyjay  
       2016-10-07 17:10:08 +08:00 via Android
    不是都说 mysql 的 rand 效率很低嘛
    rqrq
        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/
    xjroot
        7
    xjroot  
    OP
       2016-10-07 23:10:50 +08:00
    @loading @ericls @cdwyd 感谢感谢,几位的建议,我现在就准备在 PHP 中 rand 一些然后直接主键形式从 sql 里查询出来速度确实很快了,可是这类 rand,会不会产生一些性能上注意的,能否在给点思路.

    @Immortal @mokeyjay 对不住对不住献丑了哈,感谢感谢 @rqrq 这个我试过了,给一个范围值可是在数据量比较大的时候,并且请求过高时就会有很尴尬的问题比如: Mysql 挂掉,内存不足( 64G )等;我觉得还是楼上说的很对,能让 php 处理的事情就别让 mysql 处理。这个是真理,最后感谢你哥们拿出了你宝贵时间给我回复这么认真。感谢
    cdwyd
        8
    cdwyd  
       2016-10-07 23:20:51 +08:00 via Android
    大概有 3000 万数据,随机生成 1000 个 id ,然后用的 where id in 速度挺快的( 2g 内存的 vps )
    xjroot
        9
    xjroot  
    OP
       2016-10-07 23:21:43 +08:00
    @cdwyd 单表??? 3000 万????????? WTF !!
    msg7086
        10
    msg7086  
       2016-10-08 02:23:34 +08:00
    @xjroot 单表三千万怎么了……?一条数据 1k 的话也就 30G 的样子啊。

    还是说你觉得太少了?
    cdwyd
        11
    cdwyd  
       2016-10-08 08:16:02 +08:00 via Android
    @xjroot
    主键查询,单表 3000 没有什么压力
    findex
        12
    findex  
       2016-10-08 09:07:32 +08:00
    @cdwyd 嗯。如果逻辑要是复杂一点,准备怎么查询呢?一个表有很多外键的那种。估计压力也不大吧。
    cdwyd
        13
    cdwyd  
       2016-10-08 09:17:32 +08:00 via Android
    我自己用的时候一般都是拆分成了多次单表查询然后开缓存,对于热门数据速度还是可以的。

    压力大不大试过才知道,没做的时候总想着分库分表什么的,其实可能用不到。
    xjroot
        14
    xjroot  
    OP
       2016-11-11 02:03:10 +08:00
    @msg7086 我没有做过单表三千万。。。我得重新优化一下了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:40 PVG 14:40 LAX 22:40 JFK 01:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86