本文汇总了在使用全局二级索引时的相关注意事项。

创建GSI时的注意事项

  • 不支持在MySQL 5.6版本的RDS上创建GSI。
  • 不支持在单表或广播表上创建GSI。
  • 不支持在无主键的表上创建GSI。
  • 不支持在UNIQUE GSI中通过任何方式使用前缀索引。
  • 创建索引表时必须指定索引名。
  • 创建索引表时必须指定分库或分库加分表组合的规则,不允许仅指定分表规则或不指定任何拆分规则。
  • 索引表的INDEX列必须包含全部拆分键。
  • GSI名称不可与主表上的其它局部索引名重复。
  • GSI定义子句中,索引列与覆盖列不可重复。
  • 索引表默认包含主表的全部主键和拆分键,如果没有显式包含在索引列中,默认添加到覆盖列。
  • 对主表中的每个局部索引,如果引用的所有列均包含在索引表中,默认添加该局部索引到索引表。
  • 对GSI的每个索引列,如果没有已经存在的索引,默认单独创建一个索引。
  • 对包含多个索引列的GSI,默认创建一个联合局部索引,包含所有索引列。
  • 索引定义中,索引列的length参数仅用于在索引表拆分键上创建局部索引。
  • 建表后创建GSI时,会在GSI创建结束时自动进行数据校验,只有通过校验,创建GSI的DDL语句才能执行成功。
    说明 您也可以使用 CHECK GLOBAL INDEX对索引数据进行校验或订正。

ALTER TABLE时的注意事项

  • 下表汇总了使用ALTER TABLE语句变更列的支持情况。
    语句 是否支持变更主表拆分键 是否支持变更主表主键(也即索引表主键) 是否支持变更本地唯一索引列 是否支持变更索引表拆分键 是否支持变更Unique Index列 是否支持变更Index列 是否支持变更Covering列
    ADD COLUMN 无该场景 不支持 无该场景 无该场景 无该场景 无该场景 无该场景
    ALTER COLUMN SET DEFAULT和ALTER COLUMN DROP DEFAULT 不支持 不支持 支持 不支持 不支持 不支持 不支持
    CHANGE COLUMN 不支持 不支持 支持 不支持 不支持 不支持 不支持
    DROP COLUMN 不支持 不支持 仅当唯一键中只有1列时支持 不支持 不支持 不支持 不支持
    MODIFY COLUMN 不支持 不支持 支持 不支持 不支持 不支持 不支持
    说明
    • 考虑到全局二级索引的稳定性和性能情况,目前禁止直接使用DROP COLUMN命令删除全局二级索引中的列。如需删除全局二级索引中的某些列,您可以先使用DROP INDEX删除对应的全局二级索引,再重新创建一个新的二级索引。
    • 以上对列的分类存在重叠(如Index列包含索引表拆分键,Covering列包含主表拆分键、主键以及指定的列),若存在支持情况冲突情况,不支持的优先级高于支持。
  • 下表汇总了使用ALTER TABLE语句变更索引的支持情况。
    语句 是否支持
    ALTER TABLE ADD PRIMARY KEY 支持
    ALTER TABLE ADD [UNIQUE/FULLTEXT/SPATIAL/FOREIGN] KEY 支持,您可以同时在主表和索引表上添加局部索引,索引名称不可与GSI重复。
    ALTER TABLE ALTER INDEX index_name {VISIBLE | INVISIBLE} 支持,仅在主表执行(禁止变更GSI状态)。
    ALTER TABLE {DISABLE | ENABLE} KEYS 支持,仅在主表执行(禁止变更GSI状态)。
    ALTER TABLE DROP PRIMARY KEY 禁止
    ALTER TABLE DROP INDEX 仅支持删除普通索引或全局二级索引。
    ALTER TABLE RENAME INDEX 禁止
    说明 考虑到全局二级索引的稳定性和性能情况,目前禁止直接使用ALTER TABLE RENAME INDEX命令重命名全局二级索引。如需修改全局二级索引名,您可以先使用 DROP INDEX删除全局二级索引,再重新创建使用新名称的二级索引。

变更索引表时的注意事项

  • 不支持在索引表上执行DDL、DML语句。
  • 不支持带有NODE HINT的DML语句更新主表、索引表。

使用其他DDL时的注意事项

语句 是否支持
DROP TABLE 支持
DROP INDEX 支持
TRUNCATE TABLE 不支持
RENAME TABLE 不支持
ALTER TABLE RENAME 不支持
说明
  • 考虑主表与索引表的数据一致性,目前禁止执行TRUNCATE TABLE语句 。如需清空主表与索引表数据,您可以使用DELETE语句删除对应的数据。
  • 考虑到全局二级索引的稳定性和性能情况,目前禁止直接使用RENAME TABLE或ALTER TABLE RENAME命令重命名全局二级索引。如需修改全局二级索引名,您可以先使用DROP INDEX删除全局二级索引,修改表名后再重新创建新的二级索引。

使用DML语句时的注意事项