mysql随机取数据优化
参考: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里面放子查询(/ □ \)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-11-11 ssm整合