创建索引 CREATE INDEX

本文为您介绍迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户时,CREATE INDEX DDL 转换支持的范围。

总览

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_option: {
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}
  | ENGINE_ATTRIBUTE [=] 'string'
  | SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
}

index_type:
    USING {BTREE | HASH}

algorithm_option:
    ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:
    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

支持的范围

  • 支持创建普通索引。

  • 支持创建 UNIQUE 索引。

  • 支持创建 SPATIAL INDEX。

    重要

    OceanBase 数据库仅 3.2.4 和 4.1.0 版本支持。

  • 支持创建前缀索引。

    CREATE INDEX i ON t(c1(2));
  • index_option 中仅支持指定 comment。

不支持的范围

重要

如果同步的 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。

不支持创建函数索引。

忽略的属性

重要

如果同步的 DDL 包含以下不支持的定义,则这些属性将不会被解析和转换,最终会被忽略。

  • 不支持指定 ASC / DESC 关键字。

  • 不支持指定 KEY_BLOCK_SIZE

  • 不支持指定 WITH PARSER

  • 不支持指定 VISIBLE | INVISIBLE

  • 不支持指定 ENGINE_ATTRIBUTE

  • 不支持指定 SECONDARY_ENGINE_ATTRIBUTE

  • 不支持指定 ALGORITHM = DEFAULT | INPLACE | COPY

  • 不支持指定 LOCK = DEFAULT | NONE | SHARED | EXCLUSIVE

使用限制

重要

由于 OceanBase 数据库 MySQL 租户本身的限制,如果存在以下场景,同步的 DDL 被成功转换后,执行到 OceanBase 数据库 MySQL 租户可能会报错。

OceanBase 数据库 MySQL 租户不支持将索引创建在某些特定字段类型上。详情请参见 MySQL 数据库和 OceanBase 数据库 MySQL 租户的 DDL 不兼容点