MySQL 8.0 并行扫描仅对无索引全表扫描的InnoDB大表查询生效,需显式配置innodb_parallel_read_threads>0且用EXPLAIN FORMAT=TREE验证,不适用于聚合、LIMIT、索引查找等场景。MySQL 8.0 并行扫描只对特定引擎和查询生效并行扫描不是"所有 SELECT 都自动变快",它只在 InnoDB 表上、配合 EXPLAIN FORMAT=TREE 能看到 Parallel scan 提示的场景才真正启用。最常见触发条件是:全表扫描(无有效索引)、WHERE 条件简单(如 WHERE id > 1000)、且查询涉及大量数据(通常 > 数百万行)。MyISAM、Memory、分区表(即使底层是 InnoDB)都不支持;带 LIMIT、DISTINCT、GROUP BY、子查询或窗口函数的语句也大概率退回到单线程。SELECT * FROM huge_table WHERE status = 1 → 可能并行(若 status 无索引)SELECT COUNT(*) FROM huge_table → 不并行(聚合强制单线程)SELECT * FROM huge_table WHERE id IN (1,2,3) → 不并行(走索引,不触发扫描)必须手动开启并行度参数,且默认是关闭的MySQL 8.0 默认关闭并行扫描,靠 innodb_parallel_read_threads 控制线程数,值为 0 表示禁用。它不是全局并发开关,而是每个满足条件的查询最多可使用的后台线程数(上限 4,设为 1 就等于没开)。这个参数不能动态 SET GLOBAL 永久生效------它只在会话级临时有效,且仅对后续新执行的查询起作用;服务重启后恢复为 0。生产环境想长期使用,得写进配置文件 my.cnf 的 mysqld 段里。临时启用:SET SESSION innodb_parallel_read_threads = 4;配置文件写法:innodb_parallel_read_threads = 4值设太高反而可能拖慢:超过 CPU 核心数或 I/O 带宽时,线程争抢导致延迟上升EXPLAIN 看不到并行?先确认 FORMAT 和执行计划层级普通 EXPLAIN 输出里完全不会提"parallel",必须用 EXPLAIN FORMAT=TREE 才能看到是否触发。而且只有当扫描成为执行计划最外层节点(比如没被嵌套在派生表或物化临时表里)时,才会显示 Parallel scan。 RedClaw 百度推出的手机端万能AI Agent助手
相关推荐
小oo呆2 分钟前
【学习心得】Python多进程一条泥憨鱼3 分钟前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读CodeGL4 分钟前
9、Python基础之IO编程每天一道题5 分钟前
Redis 缓存为什么会出问题?穿透、击穿、雪崩与缓存一致性HySpark6 分钟前
ERes2Net声纹识别短音频匹配不稳定:从音频时长到有效音素的排查实践TomEval9 分钟前
【测AI】第17篇:大模型评测方法论 —— LLM 怎么测?fanruitian11 分钟前
python 进程 线程tongyiixiaohuang28 分钟前
物料成本核算单同步返回信息策略实战教程:从金蝶云星空回写 MySQL 的闭环设计m0_敲代码的彭于晏16828 分钟前
OpenCode 2.0 智能编程效果全景展示星云低代码开发平台33 分钟前
AI 工作台记录删除与业务审计留存:三层数据边界设计