本文汇总了在使用全局二级索引时的相关注意事项。
创建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 DROP FOREIGN KEY fk_symbol | 支持,仅在主表执行。 |
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语句时的注意事项
- 不支持在索引表上执行DML语句。
- 在主表上执行DML语句的限制,请参见全局二级索引对DML的限制。