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助手
相关推荐
2601_967987372 分钟前
python判断变量名不要调用任何函数实现这个DBA有点耶25 分钟前
从反向扫描O(n)到正向扫描O(1):降序索引的物理机制与混合排序匹配规则卷无止境1 小时前
SALib敏感性分析的python库学习笔记2501_933923252 小时前
解读Redis:单线程模型duansamve2 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?特立独行的猫A2 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比特立独行的猫A3 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GBTapdata3 小时前
被忽略的第三类上下文:Agent 进入真实业务后,还缺什么?duansamve3 小时前
详解Flask中Session和Cookie威哥爱编程4 小时前
模拟面试智能体开发实战 04:面试聊到哪算哪?用状态机把整场面试编排起来