您现在的位置是: 首页 > MySQL MySQL
MYSQL取随机数据
冬寂
2020-08-05 23:23:08
【MySQL】
3778人已围观
一 、 被MYSQL警告的一种写法
> SELECT * FROM table order by rand() limit 10;
(如果你的数据永远不会超过10000条,这是最简单的方式,数据量大就尽早绕道)
缺点:效率极低
二 、 连续ID方式
> SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 10;
每次取的数据起始位置都是随机的,但结果ID连续
优点:效率高
缺点:ID连续
三 、 ID不连续,随机方式,效率高
> SELECT * FROM table WHERE id >= ((SELECT MAX(id) FROM table) - (SELECT MIN(id) FROM `table`)) * RAND() + (SELECT MIN(id) FROM `table`) limit 10;
优点:效率高,ID不连续,执行效率高
四 、 但是你可能会发现,以上都有一定的好或者难以实行的缺陷
PHP傻瓜式
最后傻瓜式思路,你可能觉得太low,但是这样做没问题的
取数据库最小ID与最大ID,生成一个随机数 r
然后 where 条件中 id>r 只取一行
取10条数据为例,循环10次
缺点:执行太多次查询,本能告诉我们这行为不友好,确实不友好,效率相对低
优点:不论你有多大的数据量,效率都不会被拉很低,相对会地一点,但绝对在接受范围内
100万数据 小于0.5秒
执行时间在小数据量和大数据量波动很低.
五 、 有个思路
将所有ID放到缓存,比如redis,数据增加减少都去操作redis,
直接取redis随机个ID, where in去取数据
缺点:稳定性不高,另外 where in效率不高
推荐第三种方式
也推荐第四种方式
有的代码,想法”LOW”,写法”LOW”,但耐不住实用
上一篇: mysql重建主键ID
下一篇: 没有了!
相关文章
随机图文
-
死亡考试
七月的新上海,天气格外的热。上午七点刚过,太阳就从地平在线恶狠狠地跳出来,把存了一个晚上的光线一股脑倒在毫无遮挡的柏油马路上,唯一可以聊作安慰的是路边好歹还算有点遮荫的地方,比如车站旁边就生着几棵小树,不过那都是马路拓宽之后新载下去的,比一次性筷子粗不了不少。原先这里倒是生了一排一个人抱不过来的大树,据说都是长了将近百年的,可惜这些老树都在城市道路拓宽工程里给砍了个精光。 -
执行count(1)、count(*) 与 count(列名) 到底有什么区别?
执行count(1)、count(*) 与 count(列名) 到底有什么区别 -
a标签换行排版问题 / a标签padding-top/padding-button无效问题-解答
a标签换行排版问题 / a标签padding-top/padding-button无效问题-解答 -
Linux服务器中输入如下命令抓取网站HTML页面
Linux服务器中输入如下命令抓取网站HTML页面
点击排行

站长推荐

猜你喜欢
- MySQL ANY_VALUE() 函数
- MySQL 随机排序 ORDER BY RAND() 性能优化
- 如何在网上向人求助
- 提问的智慧
- 执行count(1)、count(*) 与 count(列名) 到底有什么区别?
- 韦伯天文望远镜将会改写宇宙历史,如果它能正常工作的话(The Webb Space Telescope Will Rewrite Cosmic History. If It Works.)
- 韦伯太空望远镜将改写宇宙历史(The Webb Space Telescope Will Rewrite Cosmic History. If It Works.)
- 韦伯太空望远镜将改写宇宙历史(The Webb Space Telescope Will Rewrite Cosmic History. If It Works.)
- 《人类动物园》:为什么说都市是人类动物园?
- 对话罗永浩:再创业可能后悔,不再创业百分之百后悔