列出按磁盘使用情况排序的行

时间:2017-09-06 12:39:20

标签: sql-server sql-server-2012

我们有一个SQL服务器表,已经为一个客户增加到100GB大小。平均而言,该表占用1-5 GB。

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

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

这已在DBA Stack Exchange HERE上得到解答,他们使用的查询是:

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

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


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

只需添加表名和客户ID

即可

答案 1 :(得分:0)

查询所有连接列的DATALENGTH()的表和顺序:

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

答案 2 :(得分:0)

根据我的理解,你想要删除占用更多空间的行,我可以建议一种方式,你聚合一行的所有列并获得结果的长度,你可以按长度排序并删除顶部的那些行

[或]

在插入自身时,在行的长度上有分区[列在一起],我没有尝试使用大数据