当前位置: 首页 > news >正文

mysql存在10亿条数据,如何高效随机返回N条纪录,sql如何写

1 低效方案

1.使用ORDER BY RAND():

SELECT * FROM your_table
ORDER BY RAND()
LIMIT 1;
这将随机排序表中的所有行,并且通过LIMIT 1仅返回第一行,从而返回一个随机记录。然而,对于大型表来说,ORDER BY RAND()可能会导致性能问题,因为它需要对整个表进行排序。

2 高效方案

2.使用RAND()函数和WHERE子句:
SELECT * FROM your_table
WHERE RAND() <= 0.01
LIMIT 1;

这个方法将RAND()函数与一个WHERE子句一起使用,以限制只有很小一部分行被选中(在这个例子中,是1%的行),然后再从中选择一行。这种方法对于大型表来说,通常比ORDER BY RAND()更高效,
因为它不需要对整个表进行排序,但需要调整0.01的值以控制所选行的数量。
请注意,这两种方法都可以返回一个随机的记录,但是在大型表上,第一种方法可能会导致性能问题。根据你的需求和数据库规模,你可以选择适合你的方法。


3 mysql order by rand()内部查询原理

ORDER BY RAND() 在 MySQL 中用于随机排序查询结果的行。其内部工作原理如下:
生成随机数(seed): 当执行 ORDER BY RAND() 查询时,MySQL会生成一个随机种子 (seed)。这个种子通常基于系统时间或其他因素,以确保每次查询都有一个不同的种子。这个种子用来初始化伪随机数生成器。
计算随机值: 随机种子被用于伪随机数生成器,该生成器会计算一系列随机数。这些随机数将与查询结果的行相关联,以确定它们的排序顺序。
排序: 使用生成的随机数对查询结果的行进行排序。每行都与一个随机数相关联,根据这些随机数的值进行排序。这会导致行的顺序在每次查询时都不同,从而实现了随机排序。
返回结果: 排序完成后,查询返回结果,其中行的顺序是随机的。
虽然 ORDER BY RAND() 可以实现随机排序,但它在大型数据表上可能会导致性能问题,因为它需要对整个结果集进行排序。这种方法的效率不高,
特别是对于包含大量行的表。在这种情况下,可能需要考虑其他方法,例如使用 WHERE RAND() <= some_value 的方式来随机选择行,这不涉及全局排序,因此性能更好。

http://www.lryc.cn/news/209267.html

相关文章:

  • c语言中啥时候用double啥时候用float?
  • vscode 保存 “index.tsx“失败: 权限不足。选择 “以超级用户身份重试“ 以超级用户身份重试。
  • 综合性练习
  • threejs(7)-精通粒子特效
  • 使用了百度OCR,记录一下
  • 5.OsgEarth加载地形
  • 基于回溯搜索算法的无人机航迹规划-附代码
  • 微信小程序云开发笔记-初始化商城小程序
  • vulnhub_DeRPnStiNK靶机渗透测试
  • 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端?
  • sass和 scss的区别?
  • Vuex 动态模块状态管理器
  • 实现分片上传、断点续传、秒传 (JS+NodeJS)(TypeScript)
  • 浅谈安科瑞EMS能源管控平台建设的意义-安科瑞 蒋静
  • 【原创】指针变量作为函数参数要点注意+main函数中值是否改变
  • 售后处置跟踪系统设想
  • python实现ModBusTCP协议的server
  • AndroidStudio编译错误‘android.injected.build.density‘ is deprecated
  • 计网小题题库整理第一轮(面向期末基础)(3)
  • 进程控制(一):进程终止
  • 特殊类设计[下] --- 单例模式
  • 计算机网络-应用层(1)
  • Kotlin基础——枚举、When、in、for
  • C++编程题目------平面上的最接近点对(分治算法)
  • Linux下的文件操作和文件管理
  • 设计模式之桥梁模式
  • “从部署到优化,打造高效会议管理系统“
  • Facebook广告效果数据获取
  • nlp之文本转向量
  • 【luckfox】添加压力传感器hx711