首页 > 数据库 > mysql教程 > MySQL 的 ORDER BY RAND() 函数实际上是如何工作的?

MySQL 的 ORDER BY RAND() 函数实际上是如何工作的?

DDD
发布: 2024-11-03 00:23:02
原创
559 人浏览过

How Does MySQL's ORDER BY RAND() Function Actually Work?

MySQL 的 ORDER BY RAND() 函数如何运行

MySQL 的 ORDER BY RAND() 函数生成看似随机的结果,但其实际机制有所不同来自普遍持有的信念。与假设相反,MySQL 没有添加影响排序的随机值列。相反,它采用以下过程:

  1. 生成随机数: 该函数为表中的每一行生成 0 到 1 之间的随机数。
  2. 对行进行排序: 然后根据生成的随机数按升序对行进行排序。
  3. 检索数据:当 LIMIT 与 ORDER BY RAND() 一起使用时,MySQL 从排序结果集的顶部检索行。

意外的执行时间

提供的测试查询展示了意外的执行时间:

Query Execution Time
SELECT * FROM table ORDER BY RAND() LIMIT 1 30-40 seconds
SELECT id FROM table ORDER BY RAND() LIMIT 1 0.25 seconds
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 90 seconds

执行时间的这种变化归因于每个查询检索的不同数据。与仅检索特定列 (id) 或获取已索引的数据 (id) 相比,选择整行 (*) 会产生更高的成本。

快速随机选择的替代方法

虽然 ORDER BY RAND() 可能无法提供最佳性能,但替代方法可以提供更快的结果:

  • Jay 的方法: 使用子查询生成随机 ID行选择很有效,但在处理复杂查询时可能会变得很麻烦。
  • 基于过程的方法:实现一个迭代随机 ID 直到找到有效行的过程是一种有效的解决方案,但可能会遇到数据差距较大的问题。

以上是MySQL 的 ORDER BY RAND() 函数实际上是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板