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的内部工作方式!