重要

古いバージョンの TiDB データベース (TiDB {{ curdocVersion }}) のドキュメントを表示しています。

TiDBデータベースの最新の安定バージョンを使用することをお勧めします。
重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

インデックスを追加

ALTER TABLE.. ADD INDEXステートメントは、既存のテーブルにインデックスを追加します。この操作はTiDBでオンラインです。つまり、インデックスを追加しても、テーブルへの読み取りも書き込みもブロックされません。

警告
  • DDLステートメントがクラスタで実行されているときはTiDBクラスタをアップグレードしないでください(通常、 ADD INDEXなどの時間のかかるDDLステートメントや列タイプの変更の場合)。
  • アップグレードする前に、 ADMIN SHOW DDLコマンドを使用して、TiDBクラスタに進行中のDDLジョブがあるかどうかを確認することをお勧めします。クラスタにDDLジョブがある場合、クラスタをアップグレードするには、DDLの実行が終了するまで待つか、 ADMIN CANCEL DDLコマンドを使用してDDLジョブをキャンセルしてからクラスタをアップグレードします。
  • さらに、クラスタのアップグレード中は、DDLステートメントを実行しないでください。そうしないと、未定義動作の問題が発生する可能性があります。

あらすじ

AlterTableStmt
ALTERIgnoreOptionalTABLETableNameAlterTableSpecListOptAlterTablePartitionOptANALYZEPARTITIONPartitionNameListINDEXIndexNameListAnalyzeOptionListOpt
AlterTableSpec
TableOptionListSETTIFLASHREPLICALengthNumLocationLabelListCONVERTTOCharsetKwCharsetNameDEFAULTOptCollateADDColumnKeywordOptIfNotExistsColumnDefColumnPosition(TableElementList)ConstraintPARTITIONIfNotExistsNoWriteToBinLogAliasOptPartitionDefinitionListOptPARTITIONSNUMCHECKTRUNCATEPARTITIONOPTIMIZEREPAIRREBUILDPARTITIONNoWriteToBinLogAliasOptAllOrPartitionNameListCOALESCEPARTITIONNoWriteToBinLogAliasOptNUMDROPColumnKeywordOptIfExistsColumnNameRestrictOrCascadeOptPRIMARYKEYPARTITIONIfExistsPartitionNameListKeyOrIndexIfExistsCHECKIdentifierFOREIGNKEYIfExistsSymbolEXCHANGEPARTITIONIdentifierWITHTABLETableNameWithValidationOptIMPORTDISCARDPARTITIONAllOrPartitionNameListTABLESPACEREORGANIZEPARTITIONNoWriteToBinLogAliasOptReorganizePartitionRuleOptORDERBYAlterOrderItem,DISABLEENABLEKEYSMODIFYColumnKeywordOptIfExistsCHANGEColumnKeywordOptIfExistsColumnNameColumnDefColumnPositionALTERColumnKeywordOptColumnNameSETDEFAULTSignedLiteral(Expression)DROPDEFAULTCHECKIdentifierEnforcedOrNotINDEXIdentifierIndexInvisibleRENAMECOLUMNKeyOrIndexIdentifierTOIdentifierTO=ASTableNameLockClauseAlgorithmClauseFORCEWITHWITHOUTVALIDATIONSECONDARY_LOADSECONDARY_UNLOAD
Constraint
ConstraintKeywordOptConstraintElem
ConstraintKeywordOpt
CONSTRAINTSymbol
ConstraintElem
PRIMARYKEYKeyOrIndexIfNotExistsUNIQUEKeyOrIndexOptIndexNameAndTypeOptFULLTEXTKeyOrIndexOptIndexName(IndexPartSpecificationList)IndexOptionListFOREIGNKEYIfNotExistsIndexName(IndexPartSpecificationList)ReferDefCHECK(Expression)EnforcedOrNotOpt
IndexNameAndTypeOpt
IndexNameUSINGIndexTypeNameIdentifierTYPEIndexTypeName
IndexPartSpecificationList
IndexPartSpecification,
IndexPartSpecification
ColumnNameOptFieldLen(Expression)Order
IndexOptionList
IndexOption
IndexOption
KEY_BLOCK_SIZE=LengthNumIndexTypeWITHPARSERIdentifierCOMMENTstringLitIndexInvisible
KeyOrIndex
KEYINDEX
IndexKeyTypeOpt
UNIQUESPATIALFULLTEXT
IndexInvisible
VISIBLEINVISIBLE
IndexTypeName
BTREEHASHRTREE

mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, c1 INT NOT NULL);
Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO t1 (c1) VALUES (1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3;
+-------------------------+----------+-----------+---------------+--------------------------------+
| id                      | estRows  | task      | access object | operator info                  |
+-------------------------+----------+-----------+---------------+--------------------------------+
| TableReader_7           | 10.00    | root      |               | data:Selection_6               |
| └─Selection_6           | 10.00    | cop[tikv] |               | eq(test.t1.c1, 3)              |
|   └─TableFullScan_5     | 10000.00 | cop[tikv] | table:t1      | keep order:false, stats:pseudo |
+-------------------------+----------+-----------+---------------+--------------------------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE t1 ADD INDEX (c1);
Query OK, 0 rows affected (0.30 sec)

mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3;
+------------------------+---------+-----------+------------------------+---------------------------------------------+
| id                     | estRows | task      | access object          | operator info                               |
+------------------------+---------+-----------+------------------------+---------------------------------------------+
| IndexReader_6          | 0.01    | root      |                        | index:IndexRangeScan_5                      |
| └─IndexRangeScan_5     | 0.01    | cop[tikv] | table:t1, index:c1(c1) | range:[3,3], keep order:false, stats:pseudo |
+------------------------+---------+-----------+------------------------+---------------------------------------------+
2 rows in set (0.00 sec)

MySQLの互換性

  • FULLTEXT 、およびHASHのインデックスはサポートさSPATIALていません。
  • 降順インデックスはサポートされていません(MySQL 5.7と同様)。
  • 現在、複数のインデックスを同時に追加することはサポートされていません。
  • CLUSTEREDタイプの主キーをテーブルに追加することはサポートされていません。 CLUSTEREDタイプの主キーの詳細については、 クラスター化されたインデックスを参照してください。

も参照してください