2017-09-06 15 views
1

对于一个客户,我们有一个SQL服务器表,它已经增长到100GB大小。平均而言,此表占用1至5 GB。按磁盘使用顺序排列的列表

我们希望列出按照磁盘使用排序的此表中的行以进行清理。

这怎么办?

+0

根据我的理解,你想删除占用更多空间的行,我可以建议一种方式,其中你聚合一行的所有列并获得结果的长度你可以按长度排序,并删除顶部 [或] 插入本身,hav e分区上的行[列在一起]的长度,我还没有尝试过大数据 –

回答

1

这尝试的DBA堆栈交易所HERE已经回答了,他们使用的查询是:

DECLARE @table NVARCHAR(128); 
DECLARE @idcol NVARCHAR(128); 
DECLARE @sql NVARCHAR(MAX); 

SET @table = '"TABLE NAME"'; 
SET @idcol = '"TABLE ID"'; 


SET @sql = 'select '[email protected]+' , (0'; 
SELECT 
    @sql = @sql+' + isnull(datalength(['+name+']), 1)' 
FROM sys.columns 
WHERE object_id = OBJECT_ID(@table); 
SET @sql = @sql+') as rowsize from '[email protected]+' order by rowsize desc'; 
PRINT @sql; 
EXEC (@sql); 

只添加表的名称和客户的ID

0

查询表和order by DATALENGTH()的所有列串连:

ORDER BY DATALENGTH(Column1) + DATALENGTH(Column2) + DATALENGTH(...)

0

按我的理解,ü要删除其占用空间比较大的行,我可以建议的一种方式,其中u聚集一个行的所有列并得到结果的长度和U可以由长度订购并从顶部

[或]

删除这些行而插入本身,具有ö分区n中的行[列在一起]的长度,我还没有和大数据

+0

感谢Tab :) –