7

データベースデータはBツリーの8kページに編成されており、PK情報情報の場合も同様であるため、データベース内の各テーブルでBツリーの高さを計算できる必要があります。したがって、特定のデータに到達するために必要なジャンプの数を明らかにします。

varchar(250)行サイズとPKサイズの両方が非常に重要であるため、たとえば250バイトを使用する必要がないため、計算が困難 です。

1)SQL Serverから情報を取得する方法はありますか?2)そうでない場合、データベースのテーブルを分析するコードを使用して大まかな見積もりを出すことは可能ですか?

4

3 に答える 3

12

はい!もちろん!

DMV = SQL Server の動的管理ビューを確認してください。これらには、インデックスに関する情報の宝庫が含まれています。はdm_db_index_physical_stats、インデックスのプロパティを確認する場合に特に便利です...

200,000 行を超える最大のテーブルに対して AdventureWorks でこのクエリを実行すると、Sales.SalesOrderDetailsいくつかのデータが得られます。

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

すべてのインデックス レベルの出力が得られるため、インデックスにレベルがいくつあるかが一目でわかります (インデックスに 3 つの行 -> 3 つのレベルがあります)。インデックス レベル 0 は常にリーフ レベルです。クラスタ化インデックス (index_id = 1) には実際のデータ ページがあります。

ここに画像の説明を入力

平均、最小、最大のレコード サイズ (バイト単位) と、多くの追加情報を確認できます。DMV を参照してください。SQL Server の内部動作を診断して覗き見るための優れた方法があります。

于 2012-01-24T19:57:51.857 に答える
3

これを試して:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IndexDepth')
于 2012-01-24T19:09:28.110 に答える
0

次数 n の B ツリーにはいくつの要素を保持できますか?

 (Average Number of elements that fit in one Leaf-node) * n ^ (depth - 1)
于 2012-01-26T08:42:37.447 に答える