すべてのプロダクト
Search
ドキュメントセンター

PolarDB:グローバルセカンダリインデックス使用時の考慮事項

最終更新日:Mar 28, 2026

グローバルセカンダリインデックス (GSI) には、作成方法、GSI を含むテーブルの変更方法、DDL および DML 操作の実行方法に関して特定の制約があります。これらの制約を事前に理解することで、スキーマ設計のエラーやランタイムでの予期せぬ障害を回避できます。

GSI の作成に関する制約

  • GSI は ApsaraDB RDS for MySQL 5.6 ではサポートされていません。

  • GSI は単一テーブルまたはブロードキャストテーブルには作成できません。

  • GSI はプライマリキーのないテーブルには作成できません。

  • プレフィックスインデックスは UNIQUE GSI では使用できません。

  • インデックステーブルを作成する際は、インデックス名を指定する必要があります。

  • インデックステーブルを作成する際は、データベースシャーディングルールのみ、またはデータベースシャーディングとテーブルシャーディングの両方のルールを指定します。テーブルシャーディングルールのみの指定、またはシャーディングルールを全く指定しないことは許可されていません。

  • インデックステーブルのインデックス列には、すべてのシャードキーを含める必要があります。

  • GSI 名は、プライマリテーブル内のどのローカルインデックスの名前とも重複できません。

  • GSI の定義では、インデックス列とカバーリング列は互いに異なる必要があります。

  • デフォルトでは、インデックステーブルにはプライマリテーブルのすべてのプライマリキーとシャードキーが含まれます。インデックス列として明示的にリストされていないプライマリキーまたはシャードキーは、自動的にカバーリング列に追加されます。

  • プライマリテーブルの各ローカルインデックスについて、それが参照するすべての列がインデックステーブルに存在する場合、そのローカルインデックスは自動的にインデックステーブルに追加されます。

  • デフォルトでは、GSI 内の各インデックス列をカバーする既存のインデックスがない場合、その列に対して個別のインデックスが作成されます。

  • 複数のインデックス列を持つ GSI の場合、デフォルトでそれらすべての列をカバーする複合ローカルインデックスが作成されます。

  • インデックス列の長さパラメーターは、インデックステーブルのシャードキーにローカルインデックスを作成する場合にのみ適用されます。

  • 既存のテーブルに GSI を作成すると、作成プロセスの最後に PolarDB が自動的にデータ整合性を検証します。DDL ステートメントは、データが検証に合格した後にのみ成功します。

GSI データを手動で検証または変更するには、CHECK GLOBAL INDEX ステートメントを使用します。

ALTER TABLE の制約

列操作

次の表は、GSI を持つテーブルでサポートされている ALTER TABLE の列操作を示しています。

ステートメントプライマリテーブルのシャードキープライマリテーブルのプライマリキー (インデックステーブルのプライマリキーでもある)ローカル一意インデックス列インデックステーブルのシャードキー一意インデックス列インデックス列カバーリング列
ADD COLUMN該当シナリオなし非対応該当シナリオなし該当シナリオなし該当シナリオなし該当シナリオなし該当シナリオなし
ALTER COLUMN SET DEFAULT / ALTER COLUMN DROP DEFAULT非対応非対応対応非対応非対応非対応非対応
CHANGE COLUMN非対応非対応対応非対応非対応非対応非対応
DROP COLUMN非対応非対応対応 (一意キーが 1 つの列のみで構成されている場合)非対応非対応非対応非対応
MODIFY COLUMN非対応非対応対応非対応非対応非対応非対応
列の分類は重複する可能性があります。たとえば、インデックス列にはインデックステーブルのシャードキーが含まれ、カバーリング列にはプライマリテーブルのシャードキー、プライマリキー、および明示的に指定された列が含まれます。ある列が「非対応」と「対応」の両方のカテゴリに該当する場合、「非対応」が優先されます。

GSI から列を削除するには、DROP INDEX ステートメントを使用して GSI を削除し、不要な列を含まない状態で再作成します。列を直接 DROP COLUMN で削除することはサポートされていません。これは、GSI の安定性とパフォーマンスを保護するためです。

インデックス操作

次の表は、サポートされている 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共通インデックスと GSI のみ対応。
ALTER TABLE RENAME INDEX非対応。GSI の名前を変更するには、DROP INDEX で GSI を削除し、新しい名前で再作成します。

インデックステーブルの制約

  • DDL および DML ステートメントはインデックステーブルでは実行できません。

  • NODE HINT を含む DML ステートメントは、プライマリテーブルまたはインデックステーブルの更新には使用できません。

その他の DDL ステートメントの制約

ステートメント対応状況
DROP TABLEはい
DROP INDEXはい
TRUNCATE TABLE非対応。プライマリテーブルとそのインデックステーブルの両方からデータを消去し、整合性を維持するには、代わりに DELETE ステートメントを使用します。
RENAME TABLE非対応。GSI を持つテーブルの名前を変更するには、DROP INDEX で GSI を削除し、テーブル名を変更してから GSI を再作成します。
ALTER TABLE RENAME非対応。上記の RENAME TABLE と同じ回避策を使用します。

DML ステートメントの制約

DML ステートメントはインデックステーブルでは実行できません。プライマリテーブルに対する DML 操作の制約については、「DML に対するグローバルセカンダリインデックスの制限」をご参照ください。