美文网首页
MySQL随机抽取数据的性能问题

MySQL随机抽取数据的性能问题

作者: 浥羽醉悠扬 | 来源:发表于2020-01-21 11:08 被阅读0次

    在随机抽取数据,并且数据量超过1万的时候,这种写法效率太低。
    写法1:

    SELECT * FROM table_name ORDER BY RAND() LIMIT 5;
    

    按目前各种论坛博客查到的资料,换成这种可以成倍的提升效率
    写法2:

    SELECT
        * 
    FROM
        goods AS t1
        JOIN (
    SELECT
        ROUND(
        RAND( ) * ( ( SELECT MAX( goods_id ) FROM `goods` ) - ( SELECT MIN( goods_id ) FROM `goods` ) ) + ( SELECT MIN( goods_id ) FROM `goods` ) 
        ) AS id 
        ) AS t2 
    WHERE
        t1.goods_id >= t2.id 
    ORDER BY
        t1.goods_id 
        LIMIT 5;
    

    就实际操作来说:

    1.当数据量小于1万时,写法1与写法2在效率上没有差异。
    2.当数据量大到一定程度时,写法1的性能会迅速下降。40万订单数据,随机抽取5条耗时11s。同样条件下,写法2耗费时间0.03s。
    3.写法2不适用于经过一定规则生成的id为主键的表,而且取出的数据是连续的,所以只能一次查询一条。但是效率上依旧完胜于写法1。

    相关文章

      网友评论

          本文标题:MySQL随机抽取数据的性能问题

          本文链接:https://www.haomeiwen.com/subject/lhijzctx.html