このトピックでは、グローバルセカンダリインデックス (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ステートメントの実行に関する注意事項
- インデックステーブルではDML文を実行できません。
- プライマリテーブルでのDMLステートメントの実行制限の詳細については、「DMLのグローバルセカンダリインデックスの制限」をご参照ください。