2017-11-21 21 views
1

我々がロードされているいくつかのテーブル(行ごとの何百万、数百)が、次のクエリは、テーブル全体を必要とは(種類がAUTO_INCREMENTから離れて、全く同じである)に書き換えられる:なぜMODIFY AUTO_INCREMENTはテーブルを再構築する必要がありますか?

ALTER TABLE sales MODIFY id BIGINT(20) NOT NULL AUTO_INCREMENT; 

はこのちょうどですMySQLの巨大な監督か、それともディスク上のデータのフォーマットを根本的に変えるのでしょうか?

答えて

1

列のAUTO_INCREMENT特性を変更することは、オンラインDDL変更として行うことはできません。でも、私は明示的に要求しようとすると:

mysql> alter table sales modify column id bigint not null auto_increment, 
    ALGORITHM=INPLACE; 

ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. 
Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. 

列定義を変更する。この場合は、(エラーメッセージに基づいて)列タイプへの変更としてカウントしているようです。

https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html#innodb-online-ddl-summary-gridは言う:

の変更、列のデータ型を...唯一の列の型がまだ除いて、テーブルを再構築するために必要とされる変更は、MySQL 5.7では

アルゴリズム= COPYをサポートしていますVARCHARの長さの増加はINPLACE変更として許可されます。

テーブルの再構成を行わずにAUTO_INCREMENTプロパティを変更することが許可されていると考えるだけではありません。https://bugs.mysql.com/bug.php?id=72109

関連する問題