ADMIN CLEANUP INDEX
ADMIN CLEANUP INDEX文は、テーブルに不整合なデータとインデックスがある場合に、テーブルから冗長なインデックスを削除するために使用されます。この構文は外部キー制約まだサポートしていないことに注意してください。
概要
- AdminCleanupStmt
- TableNameList
AdminCleanupStmt ::=
'ADMIN' 'CLEANUP' ( 'INDEX' TableName IndexName | 'TABLE' 'LOCK' TableNameList )
TableNameList ::=
TableName ( ',' TableName )*
例
何らかの理由により、データベース内のtblテーブルに不整合なデータとインデックスがあるとします (たとえば、災害復旧シナリオでクラスター内の一部の行データが失われるなど)。
SELECT * FROM tbl;
ERROR 1105 (HY000): inconsistent index idx handle count 3 isn't equal to value count 2
ADMIN CHECK INDEX tbl idx ;
ERROR 1105 (HY000): handle &kv.CommonHandle{encoded:[]uint8{0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8}, colEndOffsets:[]uint16{0xa}}, index:types.Datum{k:0x5, decimal:0x0, length:0x0, i:0, collation:"utf8mb4_bin", b:[]uint8{0x0}, x:interface {}(nil)} != record:<nil>
クエリSELECTのエラーメッセージから、テーブルtblには2行のデータと3行のインデックスデータが含まれていることがわかります。これは、行とインデックスのデータが不整合であることを意味します。同時に、少なくとも1つのインデックスがダングリング状態にあります。この場合、 ADMIN CLEANUP INDEXステートメントを使用してダングリングインデックスを削除できます。
ADMIN CLEANUP INDEX tbl idx;
実行結果は以下のとおりです。
ADMIN CLEANUP INDEX tbl idx;
+---------------+
| REMOVED_COUNT |
+---------------+
| 1 |
+---------------+
ADMIN CHECK INDEXステートメントを再度実行して、データとインデックスの一貫性をチェックし、データが通常の状態に復元されたかどうかを確認できます。
ADMIN CHECK INDEX tbl idx;
Query OK, 0 rows affected (0.01 sec)
MySQLの互換性
このステートメントは、MySQL 構文に対する TiDB 拡張です。