2

MyISAM テーブルで削除を実行すると、テーブルが最適化されるまでテーブルに穴が残ります。

これは同時挿入に影響します。デフォルト設定では、concurrent_inserts は穴のないテーブルに対してのみ機能します。ただし、MyISAM のドキュメントでは、concurrent_insert セクションの下に次のように記載されています。

ホールがあるものも含め、すべての MyISAM テーブルに対して同時挿入を有効にします。穴のあるテーブルの場合、テーブルが別のスレッドで使用されている場合、テーブルの最後に新しい行が挿入されます。それ以外の場合、MySQL は通常の書き込みロックを取得し、行をホールに挿入します。

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_concurrent_insert

新しい行がテーブルに挿入されるたびに、MyISAM が自動的に穴を埋めるということですか? 以前は、テーブルを最適化するまで穴は修正されないと思っていました。

4

2 に答える 2

1

はい、MyISAMテーブルは削除された/空き領域を再利用します(これがすべての場合に当てはまるかどうかはわかりません)。

これは、少数のレコードを削除して新しいレコードを挿入することで簡単に確認できます。そのテーブルのMyISAMデータファイルのサイズは大きくなりません。

于 2010-05-28T16:31:29.860 に答える
1

テーブルの中央に挿入するには、ロックが必要です。したがって、デフォルト設定では、MySQLは同時挿入を防ぎますが、穴を埋めることを優先します。

したがって、はい、MySQLは穴を埋めることを好みます。

コンカレント挿入を2に設定すると、MySQLは、テーブルにロックがある場合は、埋める穴がまだある場合でも、ロックを必要としない最後に挿入するように指示します。したがって、これにより、中央に穴がある場合でも、穴を埋めるのに時間がかかるという犠牲を払って、同時挿入が可能になります。

于 2010-05-28T16:33:14.540 に答える