开启MRR时MySQL查询返回错误结果的问题求助
MySQL 8.0.33 (macOS arm64) IN查询丢失存在记录的问题
问题现象
- 将UAT环境(MySQL 8.0.31 Linux x86_64)的数据库导出并导入本地MySQL 8.0.33(macOS arm64)后,执行包含多个
execution_element_id的IN查询时,部分已确认存在的记录(例如execution_element_id=107515)无法被返回。 - 以下操作可使查询正常返回结果:
- 单独查询该ID(例如
SELECT * FROM your_table WHERE execution_element_id = 107515) - 为IN查询添加
ORDER BY子句 - 执行会话级命令关闭MRR优化:
SET SESSION optimizer_switch='mrr=off'
- 单独查询该ID(例如
环境差异与Bug状态
- Windows 11 WSL环境下的MySQL 8.0.34未出现此问题。
- 已向MySQL官方提交Bug,编号为112642。
临时解决方案
- 会话级临时修复:执行
SET SESSION optimizer_switch='mrr=off',关闭当前会话的MRR优化,后续查询即可正常返回结果。 - 全局配置修改:若需要所有会话生效,可修改MySQL配置文件(my.cnf或my.ini),添加
optimizer_switch='mrr=off',保存后重启MySQL服务。 - 调整查询语句:在受影响的IN查询末尾添加
ORDER BY子句,强制改变查询执行计划。 - 版本升级:升级本地MySQL至8.0.34及以上版本(参考WSL环境无问题的版本),等待官方修复彻底解决该问题。
内容的提问来源于stack exchange,提问作者Zacharias
相关产品推荐
相关产品推荐

