本文匯總了在使用全域二級索引時的相關注意事項。
建立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的限制。