mysql随机取数据优化
2023-09-27 14:26:38 时间
参考:https://blog.csdn.net/u011870280/article/details/87809570
mysql表中随机取三条数据。
本来是打算用:
`select * from table order by rand() limit 3`
结果40W的表查询要2.6秒,速度贼慢。每条记录都调用了rand()行数来排序
后来发现mysql官方手册也不推荐这种做法,找到下面这种方法:
`
1. SELECT * FROM table AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table)) AS id) AS t2 WHERE t1.id >= t2.id
2. ORDER BY t1.id ASC LIMIT 3
`
不过这种方式不适用,它需要一个自增注解,而我的表主键是uuid。而且不均匀
后来又在网上找到下面这种方法
`
1. SELECT * FROM table WHERE id IN
2. (SELECT id FROM (SELECT id FROM table ORDER BY rand() LIMIT 3) t)
`
查询只要0.3秒,效果贼好。原因是因为排序时只把id加载到内存,在sort buffer中排序,没有加载所有字段,减少了磁盘读取。而为什么用两层查询是因为这个:
mysql不支持在in里面放子查询(/ □ \)
相关文章
- MySql与Qt连接、将数据输出到QT的窗口tableWidget详细过程。
- MySQL 处理海量数据时的一些优化查询速度方法
- mysql 5.7 登录时报:ERROR 1862 (HY000): Your password has expired
- MySQL:模糊查询LIKE、REGEXP、IN
- mysql source、mysqldump 导入导出数据(转)
- mysql修改密码后报错:ERROR 1045:Access denied for user:'root@localhost'(using password:YES)
- 【MySQL】海量量数据查询优化
- MySQL具体解释(16)-----------海量数据建议
- MySQL 处理海量数据时的一些优化查询速度方法
- MySQL权限整理及授权命令
- SQL 50 题(MySQL 版,包括建库建表、插入数据等完整过程,适合复习 SQL 知识点)
- mysql存储过程对900w数据进行操作测试
- MySQL 插入数据
- 如何在一个系统下同时运行两个甚至多个MYSQL数据库
- MySQL事务
- MySQL(二) 数据库数据类型详解
- mysql 主键自增设置,插入数据就不必再设置了。
- 大数据DataX(四):MySQL导入到Hive
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- redis与mysql数据同步