2012-02-24 6 views
2

データベースに行を挿入すると、その行にデータが追加されます。行を削除するとそのデータベースの空き領域が解放されますか?または、使用されているスペースの量を変更せずに行を削除するだけですか?データベース内の行を削除すると、そのデータベースは空き領域になりますか?

+0

これはmysqlまたは(microsoft)sqlサーバーに関するものですか?あなたは両方のタグを付けました! – bfavaretto

+0

なぜ「MySQL」と「SQL-Server」の両方にタグを付けましたか?詳細は両者で異なるため、これは2つの異なる質問です。 –

+0

@MartinSmithこれは、異なるDBシステムが削除された行のスペースをどのように処理しているかということについて素晴らしい質問になるかもしれません。 –

答えて

2

SQLの場合は、その観点から異なります。たとえば、ディスク・スペースを使い果たす前に100万行を挿入することができれば、それらの半分を削除すると、もう半分を挿入するスペースがもう1つ増えます。 (トランザクションロギングを無視すると、ロギングが他の場所で行われていることが想像できます)

データファイルは、成長した後も縮小しません。したがって、データファイルによって使用されるドライブスペースは、OSまたは他のアプリケーションで使用できません。データベースの縮小操作が行われるまで、これにより、ファイル内のデータが再編成され、OSまたは他のアプリケーションが使用するためにドライブ上のスペースが解放されます。

+0

私はあなたの答えを理解している場合、データベースはスペースを再利用しますが、削除前の10GBだった場合、50万行も小さくなっても10GBのままになります。あれは正しいですか? – DataGirl

+1

@DataGirlうん、そうだよ。 DBAは、実際の物理ディスク領域を再利用する必要がある場合は、mdfファイルをメンテナンスして縮小する必要があります。 – arcain

2

Ask Tomは、Oracleの言う:

あなたがテーブルからデータを削除する場合 - ブロックは が落ちた解放されたことをブロックの上のスペースの量を想定して(そのテーブルのため 空きリストに移動しますpctusedの下に)。これらのブロックは、このテーブルへの後続の挿入および更新のために使用されます( )。

インデックスからデータを削除すると、インデックスエントリ がオンになっているブロックが "空"になりました - そのブロックはフリーリストに戻ってインデックス構造体のどこでも使用できます。それ以外のブロックはそのままで、 がそのブロックに自然に行き渡るデータ(それは b *ツリーのどこかにあるため)がそこに行きます。

削除するとスペースが有効に再利用されます。あなたのデータベースでは、 はdba_free_spaceに新しい空き領域を表示しません。空きリストにはブロック が、インデックス構造には空きスペースが多くなります。

+0

わかりやすくするために、これはOracleデータベースに適用されます。 –

+0

あなたが正しいです、私はタグをはっきりと見ませんでした。 – roymustang86

3

Oracleを使用すると、削除された行のスペースは、すぐにspecific commandsを使用して再要求できます。それ以外の場合は、@ oymustang86のように新しい行のために予約されたままになります。

関連する問題