• MySQL 中随机抽样:order by rand limit 的替代方案


    在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的。下面我来介绍随机取数据一些优化方法。

    1. SELECT * FROM table_name ORDER BY rand() LIMIT 5;
    复制代码

    rand在手册里是这么说的:
    RAND()
    RAND(N)
    返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。

    1. mysql> select RAND();
    2.         -> 0.5925
    3. mysql> select RAND(20);
    4.         -> 0.1811
    5. mysql> select RAND(20);
    6.         -> 0.1811
    7. mysql> select RAND();
    8.         -> 0.2079
    9. mysql> select RAND();
    10.         -> 0.7888
    复制代码

    你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。

    网上基本上都是查询max(id) * rand()来随机获取数据。

    http://www.thinkphp.cn/topic/5206.html

    http://my.oschina.net/leejun2005/blog/99167

  • 相关阅读:
    MySQL使用alter修改表的结构
    MySQL基本库表管理
    MySQL的rpm安装教程
    MySQL基础理论
    Linux shell awk数组使用
    Linux shell awk逻辑控制语句
    Linux shell awk模式使用
    MySQL 查看执行计划
    MySQL 自定义函数
    MySQL 内置函数
  • 原文地址:https://www.cnblogs.com/youxin/p/3568829.html
Copyright © 2020-2023  润新知