Нахождение высоты B-дерева таблицы в SQL Server - PullRequest
6 голосов
/ 24 января 2012

Поскольку данные базы данных организованы в 8 тыс. Страниц в B-дереве, а также для информации PK, должна быть возможность для каждой таблицы в базе данных рассчитать высоту B-дерева. Таким образом, показывая, сколько прыжков требуется для достижения определенных данных.

Поскольку размер строки и размер PK имеют большое значение, их сложно вычислить, поскольку, например, varchar(250) не должен занимать 250 байтов.

1) Есть ли способ получить информацию из SQL Server? 2) если нет, возможно ли дать приблизительную оценку, используя некоторый код, анализирующий таблицы базы данных?

Ответы [ 3 ]

10 голосов
/ 24 января 2012

ДА!Конечно!

Проверьте DMV = динамические административные представления в SQL Server - они содержат огромное количество информации о ваших индексах.dm_db_index_physical_stats особенно полезен для просмотра свойств индекса ...

Если вы выполните этот запрос в AdventureWorks для самой большой таблицы - Sales.SalesOrderDetails с более чем 200 000 строк - выВы получите некоторые данные:

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

Вы получите выходные данные для всех уровней индекса - так что вы сразу увидите, сколько уровней в индексе (у меня три строки -> три уровняв указателе).Уровень индекса 0 всегда является конечным уровнем - где в кластеризованном индексе (index_id = 1) у вас есть фактические страницы данных.

enter image description here

Вы можете видеть среднее, минимальное и максимальноезаписывать размеры в байтах и ​​много дополнительной информации - читайте о DMV, есть отличный способ диагностировать и заглянуть во внутреннюю работу SQL Server!

3 голосов
/ 24 января 2012

попробуйте это:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IndexDepth')
0 голосов
/ 26 января 2012

из Сколько элементов может содержаться в B-дереве порядка n?

 (Average Number of elements that fit in one Leaf-node) * n ^ (depth - 1)
...