全部產品
Search
文件中心

PolarDB:使用全域二級索引時的注意事項

更新時間:Jul 06, 2024

本文匯總了在使用全域二級索引時的相關注意事項。

建立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語句時的注意事項