【OceanBase 诊断调优】—— SQL 查询触发笛卡尔积怎么处理
问题现象
业务从 MySQL 迁移至 OceanBase 数据库 V4.3.5 BP2 版本 MySQL 模式下,SQL 查询不出结果,用 EXPLAIN EXTENDED
命令展示执行计划信息。
输出返回结果如下:
由上执行计划信息可知存在笛卡尔积。
问题原因
默认的计划不优原因是优化器默认把子查询延后计划,导致先做笛卡尔积的数据量非常大。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法
OceanBase 数据库 V4.3.5 BP2 版本已优化的一个功能,优化之后这个场景也是需要通过 Hint 干预计划的,目前只在有限的场景做了自动下压。
在子查询内加 Hint /*+PUSH_SUBQ*/
。
添加完 Hint 以后的执行计划输出返回结果如下: