2017-09-06 22 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 :) –