2017-09-06 9 views
1

Wir haben eine SQL Server-Tabelle, die für einen Kunden auf 100 GB Größe angewachsen ist. Im Durchschnitt belegt diese Tabelle 1-5 GB.Listenreihen sortiert nach Plattennutzung

Wir möchten Zeilen in dieser Tabelle sortiert nach Datenträgerverwendung auflisten, um eine Bereinigung durchzuführen.

Wie kann das gemacht werden?

+0

Nach meinem Verständnis, Sie möchten die Zeilen löschen, die mehr Speicherplatz belegen, kann ich eine Möglichkeit vorschlagen, wo Sie alle Spalten einer Zeile aggregieren und die Länge des Ergebnisses erhalten und Sie können nach der Länge sortieren und löschen Sie diese Zeilen von oben [oder] beim Einfügen selbst, hav e Partitionen auf die Länge der Zeile [Spalten zusammen], habe ich nicht mit großen Daten versucht –

Antwort

1

Dies wurde auf dem DBA-Stack von Exchange beantwortet HERE, die Abfrage sie verwendet wurde:

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); 

Fügen Sie einfach in der Tabellenname und die ID für den Kunden

0

Abfrage die Tabelle und Reihenfolge von DATALENGTH() alle Spalten verkettet:

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

0

Gemäß meinem Verständnis u will die Zeilen löschen, die mehr Platz besetzen, ich einen Weg vorschlagen kann, , wobei u alle Spalten einer Zeile zusammenfassen und die Länge des Ergebnisses erhalten und u kann durch die Länge und löschen Sie diese Zeilen von oben

[oder]

bestellen, während sich das Einfügen, haben Partitionen o n die Länge der Reihe [Spalten zusammen], habe ich nicht versucht, mit großen Daten

+0

Dank Tab :) –