大きなテーブルにフィールドを追加する方法のmysql

あなたは、索引付けなどのテーブルのDDL操作を追加し、列を追加または削除、データの量は、オンラインで直接時間に影響を与えるために必要がある場合は、テーブルの構造を変更することはなく、
億万長者、オンラインデータに発現された場合、直接テーブル構造を変更することはできません

以下は、特定のプロセスで
バックアップデータが、1
'/bak/order.txt' ih_orderからOUTFILE INTO SELECT *;
MySQLの> SELECT * INTO ih_orderから'D:/bak/order.txt' OUTFILE;
10001000行が影響を受け、OKをクエリ(1分30.18秒)

図2に示すように、元のテーブル構造の物理的なコピーが
ih_orderようなテーブルih_order_bakを作成します。

図3は、テーブル構造の変更を行う、インデックスが増加する場合
、ALTERテーブル`インデックス(`追加ih_order_bak` consulate`)を、

新しいテーブルに図4に示すように、元のテーブルデータ
ih_orderからのMySQL> INSERT INTO ih_order_bak SELECT *;
(10.30分6秒)10001000行が影響を受け、OKをクエリ
レコード:10001000の重複:0警告:0

図5に示すように、元のテーブルを削除
ドロップテーブルih_orderと、

6、新しいテーブルに元のテーブルの名前を変更
ih_orderするリネームテーブルih_order_bakを。


注:
1、この方法は、事業運営に影響を与えるだろう、オンラインツールのDDLを使用することをお勧めします:PT-オンライン・スキーマ変更 、 およびより少ない時間の訪問で
2、ALTER TABLE操作のほとんどは、ロックが参加する- >新にコピーテーブル- >名前の変更- >ロック解除プロセスは、実行時にロックテーブルに非常に長い時間、およびテーブルキルを変更することができないプロセスは、元に戻すことはないだろう。
mysql5.5とそれ以前では、物事は、本番環境を実行して、ALTERを実行中(数百万の記録よりも)大きなテーブルの上には非常に困難な作業です。復興テーブルとテーブルロックするので、ユーザーの影響を与えます。
mysql5.6当初から、オンラインDDL特性が導入されています。ランニングアルター操作が文を削除し、SELECT、INSERT、UPDATEの実行を許可されている一方で、テーブルの変更操作のコピーテーブルの多種多様を強化し、ロックテーブルを避けます。そのため、最新バージョンでは、我々はファイルのコピーを抑制することができ、アルゴリズムやLOCKオプションを使用してロックされました。
しかし、たとえmysql5.6は、いくつかのALTER操作は(など、データ型を変更、主キーを追加/削除、列の追加/削除)を再構築する必要がまだあります
-------------------- -
作者:コードは、人生の愛愛
CSDNの:ソース
元します。https://blog.csdn.net/nuli888/article/details/52443165
著作権:この記事はブロガーオリジナル記事です、複製、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/ExMan/p/11247066.html