讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么在MySQL中ORDER BY RAND()会导致服务器CPU飙升

秋丽同学_1086

秋丽同学_1086

发布时间:2026-09-09 13:48:02

|

750人浏览过

|

来源于php中文网

原创

ORDER BY RAND() 会让 MySQL CPU 打满,因为其需为每一行调用 RAND() 并全量排序,触发全表扫描、内存排序及临时表落盘,导致 Sort_merge_passes 暴涨和 mysqld CPU 长期超 90%。

为什么在mysql中order by rand()会导致服务器cpu飙升

ORDER BY RAND() 为什么让 MySQL CPU 打满

因为 MySQL 必须为表中**每一行都调用一次 RAND() 函数**,再对全部 N 行做完整排序——哪怕你只写 LIMIT 1。这不是“随机取一条”,而是“全表打乱再截头”,时间复杂度是 O(N log N),且无法利用任何索引。

常见现象包括:SHOW PROCESSLIST 中大量连接卡在 Sorting result 或 Creating sort index;慢日志里反复出现同一句 ORDER BY RAND();监控看到 Sort_merge_passes 暴涨、mysqld 进程 CPU 占用长期 90%+。

MySQL 5.7 下 ORDER BY RAND() 的执行陷阱

MySQL 5.7 不支持对 RAND() 做物化或下推优化,所有计算都在 server 层完成。它会:

  • 全表扫描(type: ALL),哪怕主键索引存在也完全无视
  • 为每行分配内存存随机值,触发 sort_buffer_size 频繁扩容
  • 若结果集超出内存阈值,自动落盘生成 MyISAM 临时表,伴随 Copying to tmp table on disk
  • RAND() 是非确定性函数,导致查询无法被 Query Cache 缓存(如果还开着)

为什么 Java 应用调用时更危险

Java 侧通常用 JDBC 同步执行 SQL,若没设 queryTimeout 或连接池熔断策略,一条 ORDER BY RAND() 就可能:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 独占一个数据库连接数秒甚至几十秒,阻塞后续请求
  • 并发 5–10 QPS 时,CPU 和连接池瞬间耗尽,引发雪崩
  • 日志里反复出现 converting HEAP to MyISAM,说明已进入恶性循环

真正有效的替代方案(不是“差不多快”,而是毫秒级)

核心原则:**把随机逻辑从 MySQL 移到应用层,SQL 只走主键索引查找**。前提是表有自增 id 且空洞不严重:

  • 先查总数:SELECT COUNT(*) FROM user(可缓存 60 秒)
  • Java 生成随机偏移:int offset = ThreadLocalRandom.current().nextInt(count)
  • 执行索引查询:SELECT * FROM user WHERE id >= ? ORDER BY id LIMIT 1(? 是估算的起始 id)
  • 若返回空,最多重试 3 次;需要多条时,生成多个随机 id 并去重

空洞严重?预加载有效 id 到 Redis,用 SRANDMEMBER 或 SPOP —— 这才是生产环境真正扛得住的随机。

别信“加个索引就能优化 ORDER BY RAND()”,它根本不会走索引。真正难的是把“随机”这个需求,从 SQL 层剥离出来,而不是在原地打补丁。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

437

2023.08.15

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

880

2023.09.08

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2672

2023.09.19

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

896

2023.10.09

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

789

2023.10.17

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

414

2023.10.17

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2416

2023.10.18

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

4452

2023.10.20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 285人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn