本文匯總了在使用全局二級索引時的相關注意事項。
創建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語句時的注意事項
- 不支持在索引表上執行DML語句。
- 在主表上執行DML語句的限制,請參見全局二級索引對DML的限制。