2

Linq-to-SQLを使用するプログラムでSQLServerデータベースを使用しています

このコードを使用してデータベースを空にします

 db.Tb1.DeleteAllOnSubmit(db.Tb1.Select(x => x));
 db.SubmitChanges();

このコードを実行すると、データベース内のすべてがクリアされます。ただし、問題は、行が削除されてもデータベースのサイズが減少しなかったことです。

つまり、データがないときにそのコードを使用した後でも、データベースのサイズは同じです。

英語が下手でごめんなさい

4

2 に答える 2

3

これがSQLServerの仕組みです。データベースで「未使用スペースの解放」操作を手動で実行しない限り、スペースは返されません。これにより、レコードがデータベースファイルに物理的に格納される方法が再編成されます。それ以外の場合、未使用のスペースは保持され、新しいレコードが追加されるときに再利用されます。

于 2012-04-06T21:13:04.580 に答える
2

行が削除されるたびに、データベースはデータファイルを縮小しません。たとえば、T-SQLコマンドを使用して、サーバーにファイルを縮小するように依頼する必要がありますDBCC SHRINKDATABASEDBCC SHRINKDATABASEのMSDNドキュメントを参照)。この動作の主な理由は、おそらく縮小によるパフォーマンスへの影響です。さらに、サーバーは現在空きページを再利用します。大量の行セットを定期的に削除したり、完全なテーブルを切り捨てたりするデータベースの場合、メンテナンスタスクとして縮小をスケジュールできます。次に、そのテーブルのデータベース統計(T-SQLコマンドUPDATE STATISTICS)の更新を追加でスケジュールする必要があります。

于 2012-04-06T21:19:08.467 に答える