我在SQL Server中有一个表,其中一列包含excel文件。
现在,我们只需要删除那些excel文件,而无需删除整行。由于此表的大小每天都在增加,因此我们需要 删除旧数据以减小此表的大小
Id file_name Code
1001 abc.xlsx A1
1002 das.xlsx A2
1003 kap.xlsl A3
我已经完成以下
Update rec_table
set file_name = Null where id = '1001'
这将有助于减少表格的大小吗?
谢谢
答案 0 :(得分:1)
在SQL Server中,表的大小是通过将表中每一行的Sie相加来计算的。即,如果一个表有10行,则表的总大小将是10行的总大小之和。
对于行,总大小是通过计算每列的大小来计算的。
以您的情况为例,ID为1001的行的大小为
列ID中的值大小+列名中的值大小+列代码中的值大小
因此,如果某列的特定行的值为NULL
,则该列的数据大小为0
将特定列的值更新为NULL将减小该列的大小,但是减少多少将取决于该列的类型和存储在其中的数据
这意味着,如果您的列File_name的行ID为1001的数据为100字节,则将值更新为NULL
将使表大小减少100字节
您可以使用以下查询找出表格/行大小
用于获取整个表格的大小和详细信息
dbcc showcontig ('Person.Person') with tableresults
获取数据库中每一行的特定列的数据大小
SELECT DATALENGTH(FirstName) FROM Person.Person
答案 1 :(得分:1)
这会减少表格的大小吗?可能。
此功能将释放数据库的可用空间吗?可能不会-直到压缩数据库为止。
这是一项昂贵的手术吗?非常。
数据库将表存储在数据页上。每个数据页包含一个或多个行。如果您有宽列,则这些列可能会存储在自己的数据页上。
适合页面的行数取决于行的大小。一个页面大约8k字节。如果一行为100字节,则一行为1的表所占用的空间与一行50的表所占用的空间相同。
从表中删除列时,整个表都需要重写。 这是一个非常昂贵的操作。这可能需要很长时间。通常,选择所需的列并重新加载原始表会更快。
对我来说,删除列是减小表大小的一种非常奇怪的方法。通常,较旧的数据将被删除。最有效的方法是使用适当的日期/时间列进行按时间对表进行分区。然后,您可以通过删除分区来快速恢复空间。