mysql随机获取数据

本文共有1060个字,关键词:

问题:使用mysql如何随机获取一条数据

解决:使用mysql自带的rand()方法

方法:
测试数据为4204641条数据,四百二十万记录(已经进行了数据表分表、并增加了user_id索引)

select count(1) from views;
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 5.438 sec.

方法一:

select * from views order by rand() limit 1;
上面语句大概需要57.53秒
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 57.531 sec.
select id from views order by rand() limit 1;
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 12.563 sec.

方法二:

SELECT * FROM views AS t1 JOIN (
    SELECT ROUND(
        RAND() * ((SELECT MAX(id) FROM views)-(SELECT MIN(id) FROM views))
        +(SELECT MIN(id) FROM views)
        ) AS rid
    ) AS t2
WHERE t1.id >= t2.rid
ORDER BY t1.id LIMIT 1;
同样的四百二十万条数据需要时间平均0.02秒
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 0.141 sec.
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 0.062 sec.
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 0.016 sec.
受影响行数: 0  已找到记录: 1  警告: 0  持续时间 1 查询: 0.015 sec.

参考:

http://www.thinkphp.cn/topic/5206.html
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论