2016-06-02 8 views
1

Ich habe ein Skript, mit dem ich über Tabellen in der Datenbank berichten kann.SQL SERVER 2012 - Bericht über Spaltenoptimierung erhalten

Meine Frage ist, wie man auch Daten über die am meisten nicht optimierten Spalten bekommt?

Beispiel: Der Spaltenname, reserveddata, useddata, nicht optimierter/unusedspace.

Der Code:

use tempdatabase 

create table #getdatav1 (
    [table] varchar(255), 
    [rows] int, 
    reserved varchar(255), 
    data varchar(255), 
    index_size varchar(255), 
    unused varchar(255)) 
create table #getdatav2 (
    [servername] varchar(50), 
    [basename] varchar(50), 
    [table] varchar(255), 
    [rows] int, 
    reservedKb int, 
    dataKb int, 
    reservedIndexSize int, 
    reservedUnused int) 

EXEC sp_MSforeachtable @command1="insert into #getdatav1 
EXEC sp_spaceused '?'" 
insert into #getdatav2 ([servername], [basename], [table], [rows], reservedKb, dataKb, reservedIndexSize, reservedUnused) 
select @@SERVERNAME, DB_NAME(), [table], [rows], 
SUBSTRING(reserved, 0, LEN(reserved)-2), 
SUBSTRING(data, 0, LEN(data)-2), 
SUBSTRING(index_size, 0, LEN(index_size)-2), 
SUBSTRING(unused, 0, LEN(unused)-2) 
from #getdatav1 

select * from #getdatav2 
order by reservedKb desc 

Antwort

0

sp_spaceused funktioniert nur im Zusammenhang mit einer Tabelle und kann nicht für einzelne Spalten ausgeführt werden, wenn das ist, was Sie suchen.

Sie könnten den Cursor durch jede Spalte in den zu untersuchenden Tabelle (n) führen und jede Spalte einzeln in eine temporäre Tabelle kopieren, die dann nur diese Spalte enthält. Sie können dann sp_spaceused ausführen, um Ihre Ergebnisse zu erhalten pro Spalte.

Überprüfen Sie here für ein Beispiel für eine gespeicherte Prozedur, die das Konzept des Kopierens einer einzelnen Spalte in eine separate Tabelle und dann Ausführen von sp_spaceused darauf zeigt. Sie könnten dies als Ausgangspunkt nehmen und dann einfach Cursor erstellen, um durch jede Tabelle und jedes Feld zu gehen, die Sie analysieren möchten, indem Sie Ihre gespeicherte Prozedur aufrufen (obwohl ich vorschlagen würde, einen besseren, aussagekräftigeren Namen dafür zu wählen!) jeder und INSERT die Ergebnisse zurück in eine Tabelle für die endgültige Anzeige.