ITPub博客

首页 > 数据库 > MySQL > MySQL[bug] 子查询含用户变量,派生条件下推将导致不同版本的查询结果不一致

MySQL[bug] 子查询含用户变量,派生条件下推将导致不同版本的查询结果不一致

原创 MySQL 作者:张冲andy 时间:2024-03-26 13:39:01 0 删除 编辑

问题描述

 相同SQL在不同MySQL版本中查询相同数据的查询结果不一致,高版本8.0.32查询结果符合预期(查询有结果),低版本8.0.25查询结果不符合预期(查询无结果)。

 分析:业务SQL包含用户自定义变量赋值,SQL在不同版本的执行计划不一样,推测可能受optimizer_switch的影响。

BUG定位

参考:https://bugs.mysql.com/bug.php?id=104918

简单理解: 子查询中有用户变量的情况,派生条件下推后,有时会影响子查询中用户变量的求值分配结果。

bug修复

 bug 104918,在 MySQL 8.0.28修复。

参考:

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-28.html

http://dev.mysql.com/doc/refman/8.0/en/derived-condition-pushdown-optimization.html

bug规避

 对于低于MySQL 8.0.28的版本,可以在特定sql中添加  /*+ NO_DERIVED_CONDITION_PUSHDOWN() */  ,在特定的查询中禁用derived_condition_pushdown优化。

 全局地关闭 derived_condition_pushdown 可以在配置文件中添加  optimizer_switch='derived_condition_pushdown=off'

 问题sql中添加  /*+ NO_DERIVED_CONDITION_PUSHDOWN() */  禁用derived_condition_pushdown优化后,在MySQL 8.0.25 中出现了符合预期的正确结果。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31383567/viewspace-3010167/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
支持就关注我个人公众号:DBA烂笔头 。专注数据库领域,熟悉oracle、mysql、redis、mongodb,clickhouse等相关技术

注册时间:2016-08-11

  • 博文量
    626
  • 访问量
    286291