基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
show create table 后看不到索引的 local/global 属性
更新时间:2025-09-09 08:22
问题现象
在 OceanBase 数据库中创建表后,通过 show create table 查看表结构的时候看不到索引的 local/global 属性。
具体示例如下:
obclient(root@test1)[test]> create table t123(
c1 int,
c2 int,
c3 int,
key idx_c2(c2) global,
key idx_c3(c3) local)
partition by hash(c1) partitions 3;
Query OK, 0 rows affected (0.648 sec)
obclient(root@test1)[test]> show create table t123 \G
*************************** 1. row ***************************
Table: t123
Create Table: CREATE TABLE `t123` (
`c1` int(11) DEFAULT NULL,
`c2` int(11) DEFAULT NULL,
`c3` int(11) DEFAULT NULL,
KEY `idx_c3` (`c3`)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC
partition by hash(c1)
(partition `p0`,
partition `p1`,
partition `p2`)
1 row in set (0.007 sec)
问题原因
设置了 ob session 级别的变量
set _show_ddl_in_compat_mode=1;,可通过如下语句查看_show_ddl_in_compat_mode的值。show variables like '_show_ddl_in_compat_mode';在 obproxy 中设置过 init_sql,其中包含
set _show_ddl_in_compat_mode = 1;alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;'; show proxyconfig like 'init_sql';
适用版本
OceanBase 数据库社区版 V4.1.0 BP2 及其之后的版本。
解决方法
OceanBase MySQL 由于是 MySQL 语法的超集(包括一些 table option、索引的 option 以及一些二级分区语法),当开启 _show_ddl_in_compat_mode 变量时,执行 show create table 命令的返回结果将被调整为完全兼容 MySQL 语法的语句,所以这样的现象符合预期。