美文网首页
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