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

PolarDB:GSIを使用するための注意事項

最終更新日:May 24, 2024

このトピックでは、グローバルセカンダリインデックス (GSI) の使用に関する注意事項について説明します。

GSIを作成するための注意事項

  • ApsaraDB RDS for MySQL 5.6でGSIを作成することはできません。
  • 単一のテーブルまたはブロードキャストテーブルにGSIを作成することはできません。
  • プライマリキーを持たないテーブルでは、GSIを作成することはできません。
  • UNIQUE GSIでプレフィックスインデックスを使用することはできません。
  • インデックステーブルを作成するときにインデックス名を指定します。
  • インデックステーブルを作成するときは、データベースシャーディングルールまたはデータベースシャーディングルールとテーブルシャーディングルールを指定します。 テーブルシャーディングルールのみを指定したり、シャーディングルールを指定したりすることはできません。
  • インデックステーブルのINDEX列には、すべてのシャードキーを含める必要があります。
  • GSIの名前は、プライマリテーブル内の他のローカルインデックスの名前と同じにすることはできません。
  • GSI定義句では、インデックス列とカバー列を同じにすることはできません。
  • 既定では、インデックステーブルには、プライマリテーブルのすべてのプライマリキーとシャードキーが含まれます。 主キーとシャードキーがインデックス列に明示的に含まれていない場合、キーはデフォルトでカバー列に追加されます。
  • プライマリテーブルの各ローカルインデックスについて、参照されるすべての列がインデックステーブルに含まれている場合、デフォルトでローカルインデックスがインデックステーブルに追加されます。
  • デフォルトでは、インデックスが存在しない場合、インデックスはGSIの各インデックス列に対して個別に作成されます。
  • 既定では、複数のインデックス列を含むGSIに対して複合ローカルインデックスが作成されます。 複合ローカルインデックスには、すべてのインデックス列が含まれます。
  • インデックス定義では、インデックス列のlengthパラメーターは、インデックステーブルのシャードキーにローカルインデックスを作成するためにのみ使用されます。
  • テーブルの作成後にGSIを作成すると、作成プロセスの最後にデータが自動的に検証されます。 GSIを作成するためのデータ定義言語 (DDL) ステートメントの実行は、データが検証に合格した後にのみ成功します。
    説明 CHECK GLOBAL INDEXステートメントを使用して、インデックスデータを検証または変更することもできます。

ALTER TABLEステートメントの実行に関する注意事項

  • 次の表は、ALTER tableステートメントを実行して列を変更できるかどうかを示しています。
    ステートメントプライマリテーブルのシャードキーの変更プライマリテーブルのプライマリキーを変更します。インデックステーブルのプライマリキーとも呼ばれます。ローカル一意インデックス列の変更インデックステーブルのシャードキーの変更一意のインデックス列の変更インデックス列の変更カバーコラムの変更
    コラムを追加そのようなシナリオはありません非対応そのようなシナリオはありませんそのようなシナリオはありませんそのようなシナリオはありませんそのようなシナリオはありませんそのようなシナリオはありません
    ALTER COLUMN SET DEFAULTおよびALTER COLUMN DROP DEFAULT非対応非対応対応非対応非対応非対応非対応
    コラムを変更する非対応非対応対応非対応非対応非対応非対応
    ドロップコラム非対応非対応一意キーの列が1つしかない場合にのみサポートされます。非対応非対応非対応非対応
    変更コラム非対応非対応対応非対応非対応非対応非対応
    説明
    • GSIの安定性とパフォーマンスを確保するために、DROP COLUMNステートメントを直接実行してGSIから列を削除することはできません。 GSIから一部の列を削除するには、DROP INDEXステートメントを実行してGSIを削除し、別のGSIを作成できます。
    • 重複は、前の列分類に存在します。 たとえば、インデックス列にはインデックステーブルのシャードキーが含まれます。 カバー列には、主テーブルのシャードキー、主キー、および指定された列が含まれます。 サポートされていないとサポートされている間に競合が発生した場合、サポートされていません。
  • 次の表は、ALTER tableステートメントを実行してインデックスを変更できるかどうかを示しています。
    ステートメントサポートされているかどうか
    ALTER TABLE ADD PRIMARYキー対応
    ALTER TABLE ADD [UNIQUE/FULLTEXT/SPATIAL/FOREIGN] キーサポートされています。 プライマリテーブルとインデックステーブルにローカルインデックスを同時に追加できます。 インデックス名をGSIの名前と同じにすることはできません。
    ALTER TABLE ALTER INDEX index_name {VISIBLE | INVISIBLE}サポートされています。 このステートメントは、プライマリテーブルでのみ実行できます。 GSIステータスを変更することはできません。
    ALTER TABLE {DISABLE | ENABLE} KEYSサポートされています。 このステートメントは、プライマリテーブルでのみ実行できます。 GSIステータスを変更することはできません。
    ALTER TABLE DROP PRIMARYキー非対応
    ALTER TABLEドロップインデックス削除できるのは、共通インデックスまたはGSIのみです。
    ALTER TABLE RENAME INDEX非対応
    説明 GSIの安定性とパフォーマンスを確保するために、ALTER TABLE rename INDEXステートメントを直接実行してGSIの名前を変更することはできません。 GSI名を変更するには、 DROP INDEXステートメントを実行してGSIを削除し、新しい名前を使用して別のGSIを作成できます。

インデックステーブルの変更に関する注意事項

  • DDLまたはデータ操作言語 (DML) ステートメントをインデックステーブルで実行することはできません。
  • NODE HINTを含むDMLステートメントを実行して、プライマリテーブルまたはインデックステーブルを更新することはできません。

他のDDLステートメントの実行に関する注意事項

ステートメントサポートされているかどうか
DROP TABLE対応
DROP INDEX対応
TRUNCATE TABLE非対応
RENAMEテーブル非対応
ALTER TABLE RENAME非対応
説明
  • プライマリテーブルとインデックステーブル間のデータの整合性を確保するために、TRUNCATE TABLEステートメントを実行することはできません。 プライマリテーブルとインデックステーブルのデータを消去するには、DELETEステートメントを実行します。
  • GSIの安定性とパフォーマンスを確保するために、rename TABLEまたはALTER TABLE RENAMEステートメントを直接実行してGSIの名前を変更することはできません。 GSI名を変更するには、 DROP INDEXステートメントを実行してGSIを削除し、テーブルの名前を変更して別のGSIを作成できます。

DMLステートメントの実行に関する注意事項