Cześć,
Mam pytanie jak w temacie:
Chcę przeanalizować fragmentację indeksów w całej bazie danych. Wiem, że aby wyświetlić dane z widoku dm_db_index_physical_stats muszę podać bazę a następnie tabelę ( i pozostałe parametry mogą być nullami). Czy istnieje możliwość abym podał tylko bazę, którą chcę analizować?
Nie wiem skąd czerpiesz wiedzę, ale wg. dokumentacji object_id nie jest wymagany i może być nullem:
Specify NULL to return information for all tables and views in the specified database. If you specify NULL for object_id, you must also specify NULL for index_id and partition_number.
Czyli np, mozna tak:
select * FROM sys.dm_db_index_physical_stats(DB_ID(),NULL, NULL, NULL , 'DETAILED');
Miałem błąd mówiący, że 2 argument jest niepoprawny dla tego zapytania... Nie wiem z czego wynikał.
@Panczo - podpowiesz mi jeszcze co może być przyczyną tego, że podaję 2 argumenty: baza danych i tabela, a wynik zapytania zwraca mi też informacje o indeksach z innych baz:
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(N'BazaX'), OBJECT_ID(N'TabelaX'), NULL, NULL, NULL) AS indexstats
Możesz dodać where i w where ograniczyć przez like do tego konkretnego wyniku.
To zapytanie wyciąga wszystkie rekordy będące w tej tabelce.
A co zwróci zapytanie:
select DB_ID(N'BazaX'), OBJECT_ID(N'TabelaX')
Dla bazy zwraca jej ID a dla tabeli NULLa :O Dlaczego tak się dzieje?
No to moze zapytaj o pelny obiek: nazwabazy.schemat.nazwatabeli
, a może serwer jest CS i nie piszesz dokładnie nazwy. t To też może być kwestia uprawnień
Podałem cały i pykło :) dzięki za pomoc