2012-01-24 10 views
5

Ponieważ dane bazy danych są zorganizowane na stronach 8-kilowych w drzewie B, a także w informacjach o PK, powinna istnieć możliwość obliczenia dla każdej tabeli w bazie danych wysokość B-drzewa. W ten sposób pokazując, ile skoków potrzeba, aby dotrzeć do pewnych danych.Wyszukiwanie wysokości drzewa B tabeli w SQL Server

Ponieważ rozmiar obu wierszy i wielkość PK mają ogromne znaczenie, trudno jest je obliczyć, ponieważ np. varchar(250) nie musi zajmować 250 bajtów.

1) Czy istnieje sposób na usunięcie informacji z SQL Server? 2) jeśli nie, czy możliwe jest podanie przybliżonej wartości za pomocą kodu analizującego tabele bazy danych?

+0

Czy ty w ogóle trzeba znać wysokość? Czy nie jest losowy dostęp w strukturze drzewa B * z grubsza * 'O (log n)' * niezależnie? – Yuck

+0

Cóż, widziałem przykłady naprawdę dużych kluczy podstawowych, takich jak 2 x GUID + 2 int. Interesujące byłoby zobaczyć karę, ponieważ na każdej stronie indeksu może być zapisanych tak wiele kluczy, które mogą być przechowywane. –

+1

Należy pamiętać, że tylko tabele z indeksami klastrowanymi są przechowywane jako drzewa B, jeśli nie ma żadnego indeksu klastrowanego, tabela jest przechowywana jako sterta. Tak więc naprawdę chcesz wiedzieć, jaka jest wysokość drzewa B dla indeksu klastrowego, a więc odpowiedź poniżej dla dm_db_index_physical_stats. –

Odpowiedz

9

Tak! Oczywiście!

Zapoznaj się z DMV = dynamic management views w SQL Server - zawierają one skarbnicę informacji o twoich indeksach. dm_db_index_physical_stats jest szczególnie przydatne dla patrząc na właściwości indeksu ...

Po uruchomieniu tej kwerendy w AdventureWorks przed największym stole - Sales.SalesOrderDetails z ponad 200'000 wierszy - dostaniesz jakieś dane:

SELECT 
    index_depth, 
    index_level, 
    record_count, 
    avg_page_space_used_in_percent, 
    min_record_size_in_bytes, 
    max_record_size_in_bytes, 
    avg_record_size_in_bytes 
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('Sales.SalesOrderDetail'), 1, NULL, 'DETAILED') 

Otrzymasz dane wyjściowe dla wszystkich poziomów indeksu - dzięki temu zobaczysz na pierwszy rzut oka, ile poziomów znajduje się w indeksie (mam trzy wiersze -> trzy poziomy w indeksie). Indeks Poziom 0 jest zawsze poziomem liścia - gdzie w indeksie klastrowym (index_id = 1) masz rzeczywiste strony danych.

enter image description here

można zobaczyć średnią, minimalną i maksymalną wielkość rekordu w bajcie oraz wiele dodatkowych informacji - przeczytać na DMV użytkownika, jest to świetny sposób, aby zdiagnozować i zajrzeć do wewnętrznych mechanizmów SQL Server !

+0

Czy możesz doradzić, jaki jest rozmiar zamówienia tego indeksu drzewa B? I jak serwer SQL określa, jaki rozmiar zamówienia zastosować? To tylko z punktu widzenia ciekawości. –

3

spróbuj tego:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IndexDepth') 
Powiązane problemy