MySQL ORDER BY RAND() 函数何时排序?

2023-12-12

我读过有关 ORDER BY RAND() 及其性能问题的内容 - 这些是否仅适用于返回大型数据集的查询?例如,如果我有一个包含 100,000 行的表,并使用 WHERE 子句返回包含 10 条记录的数据集,然后使用 ORDER BY RAND() LIMIT 1,则在我的表被过滤到记录与 WHERE 子句匹配,因此性能问题可以忽略不计?


你是对的,它会在使用 WHERE、GROUP BY 和 HAVING 减少行数后应用 ORDER BY。但它会在 LIMIT 之前应用 ORDER BY。

因此,如果您充分过滤行数,那么是的,ORDER BY RAND() 可以实现您想要的效果,而不会产生很大的性能影响。简单且易于阅读的代码有一个合理的好处。

当你遇到麻烦的时候think您的查询应该将行数减少到很小,但随着时间的推移,随着数据的增长,需要排序的行数会再次变大。由于您的查询对排序结果执行 LIMIT 10,因此隐藏了您正在对 500k 行执行 ORDER BY RAND() 的事实。你只会看到性能神秘地变差。

我在书中写了有关选择随机行的替代方法SQL 反模式第 1 卷:避免数据库编程的陷阱,或者在 Stack Overflow 上的其他答案中:

  • 使用 MySQL 选择随机行
  • 随机化大数据集
  • 从mysql的大表中快速选择随机行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL ORDER BY RAND() 函数何时排序? 的相关文章

  • 物理写入文件已满 - mysql 错误

    我正在使用xampp 每次启动mysql时 我都会在xampp中收到以下错误 Error MySQL shutdown unexpectedly 13 16 14 mysql This may be due to a blocked por
  • 本地数据库缓存的最佳实践?

    我正在开发一个应用程序 该应用程序的部分内容依赖于 MySQL 数据库 在某些情况下 应用程序将在互联网连接 UMTS 有限的环境中运行 特别是延迟较高的环境 应用程序的用户能够登录 并且应用程序用户界面的大部分内容都是从 MySQL 数据
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • 如何在 join 语句中进行计数

    我有桌子post int post id varchar title text content和表comment int comment id int post id varchar content其中 post id 是外键引用表帖子 如
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • 通过将行旋转为动态数量的列来在 MySQL 中创建摘要视图

    我在 MySQL 中有一个表 其中包含以下字段 id company name year state 同一客户和年份有多行 以下是数据示例 id company name year state 1 companyA 2008 1 2 com
  • SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

    在我的错误日志中得到大量结果 如下所列 数据库中的所有表都是 innodb 并且就与这些表的任何交互而言 一切都是带有准备好的语句的 pdo 正如我所说 所有错误几乎与下面列出的错误相同 但发生在几个不同的页面上 无论页面如何 错误行始终指
  • “警告:mysql_query():提供的参数不是有效的 MySQL-Link” - 为什么?

    我的代码有什么问题吗 我不断收到此错误 Warning mysql query supplied argument is not a valid MySQL Link resource in functions php on line 4
  • 在 MySQL 中创建布尔列并将 false 作为默认值?

    我想在 MySQL 中创建一个表boolean默认值为的列false 但它默认接受 NULL 你必须指定0 意思是假 或1 意思是 true 作为默认值 这是一个例子 create table mytable mybool boolean
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • MySql 从另一个表中减去一个表

    我有两个表 A 包含所有数据 表 B 从 A 中随机选择 25 的数据创建 所以 A 和 B 具有完全相同的列 也没有独特的列 我想做的是从 A 中减去 B 有什么想法吗 查看所有行A除了那些在B SELECT FROM A WHERE f
  • 将所有奇数位置的元素移动到左半部分,将偶数位置的元素移动到右半部分

    给定一个包含正整数和负整数的数组 将所有奇数索引元素移动到左侧 将偶数索引元素移动到右侧 问题的难点是在维持秩序的同时就地做 e g 7 5 6 3 8 4 2 1 输出应该是 5 3 4 1 7 6 8 2 如果顺序不重要 我们可以使用快
  • 错误代码 13,SELECT INTO OUTFILE 问题

    我试图了解使用 INTO OUTFILE 命令时不断遇到问题的原因 我总是收到这个错误 ERROR 1 HY000 Can t create write to file var www p1 txt Errcode 13 SELECT pa
  • 消除 JPA 标准中子查询产生的冗余连接

    我只需要使用 JPA 标准执行以下 MySQL 查询 获取状态列表 来自state table 基于给定的国家名称 在country SELECT state id state name country id FROM state tabl
  • 创建rest api url以连接mysql数据库

    我想学习如何创建一个rest api url 以便我可以使用该url获取信息并将信息发布到我的mysql数据库中 谷歌搜索了很多并阅读了各种文章 但没有找到任何精确的内容可以学习 所有内容均以 about api 开头 以已创建的其余 ur
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute

随机推荐

  • 如何在php中搜索精确的数字

    如何搜索准确的号码 这段代码是这样工作的 如果我搜索 24626838 这是完全否 它什么也没有显示 之后如果我搜索这个 no 2462683 这不完整 所以它显示的结果是这样的 像这样 24626838 24626838 24626836
  • 可以在不删除和插入的情况下更新红黑树中的节点键吗?

    通常 对红黑树中的键进行更改需要通过删除然后重新插入节点来执行 是否有可能对红黑树中的节点进行key更新比delete insert更高效 通过 需要时搜索 删除 插入来实现更新 1 删除密钥O log n 2 使用新键插入新节点O log
  • 在 ASP.NET 中使用 Unity.WebForms

    我正在尝试在 webforms 项目中实现 DI 因此我在 UI 层中安装了 Unity WebForms dll 一旦我这样做 就会使用 UnityWebFormsStart 类文件为我创建一个 App Start 文件夹 该文件内有一个
  • 帮助我理解 AVAssetWriter 中的 CMTime

    我很难理解如何使用 AVAssetWriter 将 30fps 的运动 JPEG 流转换为视频文件 我没有得到的部分是 适配器appendPixelBuffer buffer withPresentationTimeresentTime 方
  • Python - 我看不到我的错误是什么,因为窗口立即消失

    我对 Python 还很陌生 我对这个问题非常恼火 我不确定这是否重要 但我使用 Python 2 7 6 运行我的 py 文件 并在我的计算机上安装了 python 而不是在任何在线事物或其他程序上使用它 每次我遇到错误时 我的程序都会正
  • sql触发器来停止跨行重复

    我有一个包含多条记录的表 用户名 例如 TOM Question ID 例如 q002 答案 例如 D 我想创建一个触发器 以便没有人可以两次提交同一问题的答案 它必须是一个触发器 only CREATE TRIGGER trigger C
  • 使用 html2canvas 的 div 的屏幕截图。发送到 php,保存:图像损坏

    我生成画布并将其传递给 php 如下所示 body on click save image function html2canvas myImage onrendered function canvas imageHolder html c
  • Apache Flink 中的 Keyby 数据分布,逻辑运算符还是物理运算符?

    根据 Apache Flink 文档 KeyBy 转换在逻辑上将流划分为不相交的分区 所有具有相同键的记录都被分配到同一个分区 KeyBy是100 逻辑转换吗 它不包括跨集群节点分布的物理数据分区吗 如果是这样 那么如何保证所有具有相同键的
  • 如何为 SpaServices 托管的多个 SPA 配置 ASP.net Core 服务器路由

    我有一个 Angular 5 应用程序 我想使用最新的 ASP net Core 上的 Angular Universal 来托管该应用程序角模板 RC 我已按照文档操作并启动并运行了应用程序 问题是我也在使用 Angular 的国际化工具
  • 如何在 AngularJS 中使用 ng-repeat 迭代键和值?

    在我的控制器中 我有如下数据 scope object data 现在这个数据是字典 其中的键和值来自json 我可以通过以下方式访问该属性object name在模板中 有没有什么方法可以让我迭代这些键并将它们显示在表格中 例如 tr t
  • 如何使用同步页面 POST 从 HTML 表单发送复杂的 JSON 对象?

    我的服务器正在使用 ServiceStack 并且希望接收如下数据 Customer Company TheCompany RegionCode AU NSW Name First Jimi Last Hendrix 我有一个包含这些字段的
  • 如何使用 Spring Kafka 检查 Kafka 是否为空?

    当我重新启动应用程序时 我需要处理 Kafka 中的剩余消息 直到它为空 然后我的应用程序应该继续正常工作 我的问题是如何检查 Kafka 主题是否为空 我正在使用 Spring Kafka Set the idleEventInterva
  • 在 Angular JS 中渲染 404 页面而不重定向

    我正在将 ui router 和 ngResource 与 AngularJS 一起使用 我的问题是 如何渲染 404 而不重定向到它 例如用户键入http www example com 错误页面名称 他应该只看到 404 页面 并且 U
  • 正确使用 sizeof 和 Byte[]

    我有点不知所措 但我有以下代码 真正的代码当然有道理 NSData dataTheseBytes Byte bytes return NSData dataWithBytes bytes length sizeof bytes 编译器警告是
  • 如何从 cin 获取超过 1 个单词的输入 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我目前正在尝试学习 C 并且正在开发我的第一个项目 它应该提出问题并让用户提供答案的输入 然后将输入写入具有某种格式的文件中 但是 我在描述行输入中不断收到错误 它只接受句子中的第一个单词
  • Android 列表视图 setOnItemClickListener 不起作用

    我想最初在列表视图中隐藏编辑文本和按钮字段 并在单击该原始数据时显示列表视图中特定原始数据的编辑文本和按钮 因此 我尝试在布局 xml 中将高度设置为 0 然后设置它当用户单击原始值时 它会变为其他值 但它不起作用我认为我的列表视图单击事件
  • `for..of` 循环如何从对象解析迭代器?

    对于实现可迭代接口的对象 它必须实现 Symbol iterator 指向一个函数的键 该函数返回iterator 我想知道是否for of循环在对象内部调用此方法来获取iterator 我很好奇的原因是 例如 Map定义了一个带有多个迭代
  • 在 JPasswordField 中显示密码,而不是将 0 设置为回显字符

    如何显示 JPasswordField 的文本而不是将 0 设置为回显字符 Java 文档说 设置值 0 表示您希望查看键入的文本 类似于标准 JTextField 的行为 以下结果导致不兼容类型错误 outField setEchoCha
  • WPF SplashScreen,如何使闪屏显示时间更长

    我发现只有一种方法可以延长启动显示时间 现在是将 ApplicationDefinition 更改为 Page 并进行配置 但我需要应用程序定义 我在这里找到了定位器 如果我使用页面 它就会丢失 所以我想让启动屏幕显示时间和显示主窗体之前的
  • MySQL ORDER BY RAND() 函数何时排序?

    我读过有关 ORDER BY RAND 及其性能问题的内容 这些是否仅适用于返回大型数据集的查询 例如 如果我有一个包含 100 000 行的表 并使用 WHERE 子句返回包含 10 条记录的数据集 然后使用 ORDER BY RAND