我们有一个SQL服务器表,已经为一个客户增加到100GB大小。平均而言,该表占用1-5 GB。
我们希望按照磁盘使用情况列出此表中的行以进行清理。
如何做到这一点?
答案 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)
根据我的理解,你想要删除占用更多空间的行,我可以建议一种方式,你聚合一行的所有列并获得结果的长度,你可以按长度排序并删除顶部的那些行
[或]
在插入自身时,在行的长度上有分区[列在一起],我没有尝试使用大数据