在SQL Server中查找表的B树的高度

Car*_*ngo 6 sql-server b-tree primary-key sql-server-2008 b-tree-index

由于数据库数据在B树中以8k页组织,并且对于PK信息信息同样如此,因此数据库中的每个表应该可以计算B树的高度.从而揭示了达到某些数据所需的跳跃次数.

由于行大小和PK大小都非常重要,因此很难计算,因为例如 varchar(250)不需要占用250个字节.

1)有没有办法从SQL Server中获取信息?2)如果没有,是否可以使用分析数据库表的一些代码进行粗略估计?

mar*_*c_s 10

是!当然!

查看SQL Server中的DMV =动态管理视图 - 它们包含有关您的索引的宝库信息.这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')
Run Code Online (Sandbox Code Playgroud)

您将获得所有索引级别的输出 - 因此您将一目了然地看到索引中有多少级别(我有三行 - >索引中的三个级别).索引级别0始终是叶级别 - 聚集索引(index_id = 1)中的实际数据页面.

在此输入图像描述

您可以看到字节中的平均,最小和最大记录大小以及大量其他信息 - 阅读DMV,有一种很好的方法可以诊断和查看SQL Server的内部工作方式!