Mysql大表オンラインDDL表フィールドの追加/表全文索引の修正解決方法

1584 ワード

フィールドの追加
ALTER TABLE `rmb_order_item` ADD COLUMN `asset_snapshot` varchar(5000) NOT NULL DEFAULT '' COMMENT '    ' AFTER `item_snapshot`,ALGORITHM=INPLACE, LOCK=NONE;

プライマリ・キー・インデックスの追加
 ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) ,Algorithm=Inplace ;

ユニークインデックスの追加
 ALTER TABLE `table_name` ADD UNIQUE (`column`) ,Algorithm=Inplace ;

全文索引の追加
ALTER TABLE `table_name` ADD FULLTEXT (`column`),Algorithm=Inplace ; 

一般索引の追加
 ALTER TABLE `table_name`  ADD KEY `table_cloum`(`table_cloum`) USING BTREE,Algorithm=Inplace ;

結合インデックスの追加
ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`),Algorithm=Inplace ;

索引の名前付け
ユニークなインデックス:
udx___..._

通常のインデックス:
idx___..._

alterは全文インデックスを追加する際に長時間解放されず、大量のDMLロックが発生した.この大きなテーブルはテーブル構造を変更するときに速度が遅い.
一般的な方法は、テーブル構造をコピーし、テーブル構造を修正し、データをインポートし、テーブルを削除し、名前を変更することです.しかし、書き込み頻度が非常に高い受注テーブルでは、データが失われやすくなります.
MySQL公式ドキュメント参照:Online DDL概要
Algorithm=Inplace:テーブルコピーによるインスタンスパフォーマンスの問題(スペース、I/Oの問題)を回避するには、DDLにこのオプションを含めることをお勧めします.DDL操作がAlgorithm=Inplace方式をサポートしていない場合、DDL操作はすぐにエラーを返します.
Lock=None:DDL操作中にトラフィックに影響を与えないDML操作のために、DDLにこのオプションを含めることをお勧めします.DDLオペレーションがLock=None(パラレルDMLオペレーションを許可)オプションをサポートしていない場合、DDLオペレーションはすぐにエラーを返します.