在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
来源:互联网 发布:人工智能芯片 知乎 编辑:程序博客网 时间:2024/04/27 03:19
看到知乎上有人提问
几百万记录的表,每天大概有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查询语句
- python调用dll 出现[Error 193]
- Android 内存溢出解决方案(OOM) 整理总结
- BitTorrent的DHT协议(译自官方版本)
- 理财改变我的生活
- 新SAT作文改革之官方作文解析(8-9分)
- 在 MySQL中,从10 万条主键不连续的数据里随机取 3000 条,如何做到高效?
- AFNetworking如何向服务器提交图片 ios中获取图片并上传图片
- javascript getSelection 用法
- JPA学习笔记
- 新浪微博点赞数链接
- 巅峰性能对决:Node.js vs io.js v2.0.0
- ArcGIS教程:太阳辐射分析的应用示例
- 【Quartz】Quartz任务调度入门
- JPA @PersistenceContext及@Transactional Annotation