Zliczanie wartości null we wszystkich kolumnach tabeli
Dzisiaj zajmiemy się skryptem bardziej raportowym niż zwykle. Sam z siebie nie naprawia niczego, niczego nie tworzy. Daje nam jednak wiele informacji na temat użycia poszczególnych kolumn tabeli w bazie danych. Informacja taka posłuży nam do lepszego rozplanowania nowej tabeli, nowych indeksów na istniejącej tabeli. W jaki sposób? Oto skrypt:
DECLARE @col nvarchar(128)
DECLARE @q nvarchar(256)
CREATE TABLE #result(
ColName nvarchar(128),
Nulls int,
TotalRecords int
)
DECLARE cur CURSOR FOR
SELECT C.name FROM sys.columns C
JOIN sys.tables T ON C.[object_id]=T.[object_id]
WHERE T.name=@tab
OPEN cur
FETCH NEXT FROM cur INTO @col
WHILE @@FETCH_STATUS=0
BEGIN
SET @q = 'INSERT INTO #result SELECT ''' + @col + ''', SUM((CASE WHEN '
+ @col + ' IS NULL THEN 1 ELSE 0 END )), COUNT(*) FROM ' + @tab
EXEC sp_sqlexec @q
FETCH NEXT FROM cur INTO @col
END
CLOSE cur
DEALLOCATE cur
INSERT INTO #result SELECT 'Sumarycznie', SUM(Nulls), SUM(TotalRecords) FROM #result
SELECT ColName, Nulls, TotalRecords-Nulls NotNull, TotalRecords,
CAST(100*(TotalRecords-Nulls)/TotalRecords AS nvarchar)+'%' [FillFactor]
FROM #result ORDER BY Nulls
DROP TABLE #result
Wynikiem działania powyższego skryptu będzie rezultat podobny do zaprezentowanego poniżej:
ColName | Nulls | NotNull | TotalRecords | FillFactor |
Kolumna1 | 0 | 504916 | 504916 | 100% |
Kolumna2 | 387990 | 116926 | 504916 | 23% |
Kolumna3 | 405645 | 99271 | 504916 | 20% |
Kolumna4 | 417782 | 87134 | 504916 | 17% |
Kolumna5 | 504787 | 129 | 504916 | 0% |
Sumarycznie | 1716204 | 808376 | 2524580 | 32% |
W przypadku dużych i starych baz danych można natknąć się na pola, które nie są używane. Jeżeli tabela jest duża, a w pewnych kolumnie nic nie ma, wtedy warto się zastanowić nad tym, czy rzeczywiście ta kolumna jest nam potrzebna. Może jest to jakaś historyczna perełka, dawniej używana, a obecnie zapomniana? Jeżeli grupa kolumn przyjmuje wartości null jednocześnie, warto rozważyć przeniesienie ich do oddzielnej tabeli z relacją jeden do jednego. Takie statystyki często bardzo ładnie pokazują błędy w normalizacji tabel. Bez względu na zastosowanie, mam nadzieję, że skrypt się przyda.
Kategoria:SQL Server
Brak komentarzy - bądź pierwszy