0

大量のデータを含むinnodbコンパクトテーブルに列を追加するのが遅い理由を誰かが説明できますか?

4

2 に答える 2

1

テーブルに列を追加するために使用ALTER TABLEすると、テーブル全体を再構築する必要があります。これは、大きなテーブルの場合は時間がかかります。

の実行中にテーブルの使用を継続する場合はALTER、pt-online-schema-changeツールの使用を検討する必要があります。

http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

于 2012-04-20T19:45:21.620 に答える
0

コンパクトテーブルのmysqlドキュメントから、各レコードのヘッダーには、フィールドがnullかどうかを示すビットが含まれていると記載されています。列を追加する場合は、そのヘッダーのサイズを変更する必要があります。これにより、少なくともそのテーブルのすべての行のサイズが変更されます。

抜粋:COMPACT行形式を使用するInnoDBテーブルの行には、次の特性があります。

各インデックスレコードには、可変長ヘッダーを前に付けることができる5バイトのヘッダーが含まれています。ヘッダーは、連続するレコードをリンクするため、および行レベルのロックで使用されます。

レコードヘッダーの可変長部分には、NULL列を示すためのビットベクトルが含まれています。NULLになる可能性のあるインデックスの列数がNの場合、ビットベクトルはCEILING(N / 8)バイトを占有します。(たとえば、NULLになる可能性のある9〜15列の列がある場合、ビットベクトルは2バイトを使用します。)

于 2012-04-23T12:46:36.293 に答える