基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
MySQL 模式下拼接符 `||` 不识别导致计划笛卡尔积
更新时间:2026-05-15 09:06
问题现象
在 MySQL 模式下 SQL 条件中使用 ||管道拼接符时候需要特别注意,默认情况下 MySQL 模式不识别这个符号,需要显示添加 sql_mode=PIPES_AS_CONCAT 才能识别,否则会产生笛卡尔积导致 SQL 超时。
问题原因
如下 SQL ON A.BIZ_ORG_ID = '01'||C.LV5_ORG_ID||'999' 关联条件由于管道符不识别导致产生 NLJ CARTESIAN ;调整后计划,优化器识别到管道符转换为 cast((T_OP_CNN, (T_OP_CNN, '01', C.LV5_ORG_ID), '999'), VARCHAR(1048576))]) 。
关键信息
例如计划中会有笛卡尔积:
NESTED-LOOP OUTER JOIN CARTESIAN 。
问题的风险及影响
SQL 超时,计划错误。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 MySQL 租户,对于 Oracle 租户无影响。
适用版本
OceanBase 数据库所有版本。
解决方法及规避方式
解决方法:
调整 SQL 写法,或者添加
sql_mode中PIPES_AS_CONCAT参数。规避方式:
添加
sql_mode='PIPES_AS_CONCAT,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE';使用 concat 函数替换。