删除数据库中的行会使该数据库释放空间吗?

时间:2012-02-24 21:10:22

标签: mysql sql-server database sql-server-2008

在数据库中插入行会向其添加数据。删除行会释放该数据库中的空间吗?或者只删除行而不更改已用空间量?

3 个答案:

答案 0 :(得分:3)

使用Oracle时,可以使用specific commands立即回收已删除行的空间。否则它将保留为新行保留,如@ oymustang86提及。

答案 1 :(得分:2)

Ask Tom对Oracle说:

  

当您从表中删除数据时 - 块将进入   该表的空闲列表(假设块上的空间量为   被释放低于pctused)。这些块将用于   后续插入和更新到此表中。

     

从索引中删除数据时 - 如果阻止索引条目   现在是“空的”    - 该块将返回到freelist,以便在索引结构中的任何位置使用。否则该块保持原样和数据   自然会进入那个区块(因为它在哪里   b * tree)将去那里。

     

删除时有效地重用空间。你的数据库不会   在dba_free_space中显示任何新的可用空间 - 它将有更多的块   自由列表和索引结构中的空洞。

答案 2 :(得分:2)

对于SQL,它取决于谁的立场。例如,如果在磁盘空间不足之前可以插入一百万行,如果删除其中一半,则可以再次插入五十万行。 (忽略事务日志记录 - 只想象日志记录在其他地方完成)

数据文件在增长后不会缩小。因此,数据文件使用的驱动器空间不可用于OS或任何其他应用程序。直到,数据库收缩操作完成。这会重新排列文件中的数据,以释放驱动器上的空间,以供操作系统或其他应用程序使用。