インデックスを追加

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

ヒント:

TiDB 分散実行フレームワーク (DXF)使用すると、このステートメントの操作を高速化できます。

概要

AlterTableStmt
ALTERIGNORETABLETableNameAddIndexSpec,
AddIndexSpec
ADDPRIMARYKEYKEYINDEXIF NOT EXISTSUNIQUEKEYINDEXIdentifierUSINGIdentifierTYPEIndexTypeFULLTEXTKEYINDEXIndexName(IndexPartSpecification,)IndexOption
IndexPartSpecification
ColumnName(LengthNum)(Expression)ASCDESC
IndexOption
KEY_BLOCK_SIZE=LengthNumIndexTypeWITHPARSERIdentifierCOMMENTstringLitVISIBLEINVISIBLEGLOBALLOCAL
IndexType
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 互換性

  • TiDB RTREE BTREE HASHインデックス タイプを受け入れますが、それらを無視します。
  • SPATIALインデックスはサポートされていません。
  • TiDB はFULLTEXTの構文の解析をサポートしていますが、 FULLTEXTインデックスの使用はサポートしていません。
  • 降順インデックスはサポートされていません ( MySQL 5.7と同様)。
  • CLUSTEREDタイプの主キーをテーブルに追加することはサポートされていません。 CLUSTEREDタイプの主キーの詳細については、 クラスター化インデックスを参照してください。
  • GLOBALインデックス オプションを使用してPRIMARY KEYまたはUNIQUE INDEX グローバルインデックスとして設定することは、 パーティションテーブルの TiDB 拡張であり、MySQL と互換性がありません。

参照

このページは役に立ちましたか?