在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
来源:互联网 发布:买淘宝账号 编辑:程序博客网 时间:2024/03/28 21:13
看到知乎上有人提问
几百万记录的表,每天大概有10万条记录发生更新,从这10万条里随机取3000条做数据分析,
select id from table where date_refresh = 20120329 order by rand() limit 0,3000
这个sql执行起来会很慢,大概三四十秒吧,怎么优化?
这个也算是MySQL的一个经典问题了。
上面这种做法是非常不明智的做法,因为RAND()函数的随机因子变成这个表总数据量,所以速度会非常慢,跟读取多少条记录不是特别大的关系;
这个问题解决的基本思路是:
SELECT id FROM table WHERE date_refresh = 20120329
SELECT * FROM table WHERE id IN (id_0, id_1, id_2, ..., id_2999)
有个回答特别好, 翻译了国外一个牛人的文章 http://shiningray.cn/order-by-rand.html
主要的思路是,如果id是连续分布,那直接根据max(id)进行获得随机id,然后直接取出
如果id不连续,存在空挡,那么可以总是选择比随机出的id大(或小)的记录
如果id不连续,且必须尽可能平均地获取记录,那么需要额外做一个表,将不连续的id映射成连续id,然后进行随机
阅读全文
0 0
- 在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
- 在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
- mysql 从大量数据表中高效随机取n条数据
- 如何在2万条纪录里随机取200条纪录?
- 随机取mysql的N条数据
- 如何在hbase中快速插入10万条数据
- 如何在hbase中快速插入10万条数据
- 从数据库随机取数据 四种数据库随机获取10条数据的方法
- MYSQL随机抽取数据库里的几条数据
- 从mysql表中随机取出几条数据
- MS SQL server 2005中查询某张表从30-40条数据,但主键ID不是连续的
- mysql 从某 id 开始,连续查询 10 条数据
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- 随机从mysql 的某个表中取出指定条数数据
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- java小知识点-获取变量得数据类型
- load过程
- VO、 DTO、 DO、 PO 的区别
- JEESZ分布式框架简介
- 内核启动流程分析
- 在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
- tp5 二级导航 合并
- 关于“自动编程软件”的一些问答
- C++对象实例化及调用
- 初识Shiro
- (libev) cannot allocate xxx bytes, aborting 问题的一种触发条件
- 不正当竞争行为维权该如何处理
- Android关于时间
- UDID替代方案