› 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 · Oct 7, 2016 · 5557 views
    This topic created in 3643 days ago, the information mentioned may be changed or developed.

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

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

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

    14 replies  •  2016-11-11 02:03:10 +08:00
    cdwyd
        1
    cdwyd  
       Oct 7, 2016 via Android
    id 连续的话,先生成 id 然后取数据
    loading
        2
    loading  
       Oct 7, 2016 via Android   ❤️ 1
    rand 我们都是在程序里生成的,这几乎成了常识……
    ericls
        3
    ericls  
       Oct 7, 2016   ❤️ 1
    楼上正解,随机的 ID 要先在程序里面生成,再查询
    Immortal
        4
    Immortal  
       Oct 7, 2016   ❤️ 1
    能用代码解决的问题不要放到数据库...这个的确是常识
    mokeyjay
        5
    mokeyjay  
       Oct 7, 2016 via Android
    不是都说 mysql 的 rand 效率很低嘛
    rqrq
        6
    rqrq  
       Oct 7, 2016
    今天也折腾了下,普通的就用自增 id 1-max 随机取出一个数字,然后取 id >= 随机数字 LIMIT 1 就行了
    参考: http://www.drupal001.com/2012/01/solution_for_mysql_random_results/
    xjroot
        7
    xjroot  
    OP
       Oct 7, 2016
    @loading @ericls @cdwyd 感谢感谢,几位的建议,我现在就准备在 PHP 中 rand 一些然后直接主键形式从 sql 里查询出来速度确实很快了,可是这类 rand,会不会产生一些性能上注意的,能否在给点思路.

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

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

    压力大不大试过才知道,没做的时候总想着分库分表什么的,其实可能用不到。
    xjroot
        14
    xjroot  
    OP
       Nov 11, 2016
    @msg7086 我没有做过单表三千万。。。我得重新优化一下了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3885 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 01:00 · PVG 09:00 · LAX 18:00 · JFK 21:00
    ♥ Do have faith in what you're doing.