インデックステーブル設計のSQL Serverのメモリの最適化

テストバージョン:SQL Serverの2017

あなたがテーブルメモリの最適化上のインデックスの3種類を作成することができ、以下のとおりです。ハッシュインデックス、メモリオプティマイザ非凝集(NONCLUSTERED)インデックスと集計(CLUSTERED)のカラムストアインデックス。

まず、インデックスを作成します

あなたは、メモリの最適化テーブルを作成するときは、インデックスの標準レベルを作成することができます。

<table_index> :: = 
  INDEXのINDEX_NAME 
{[NONCLUSTERED] HASH(カラム[、... N])WITH(BUCKET_COUNT = bucket_count)
   | [NONCLUSTERED](カラム[ASC | DESC] [、... N])
      [filegroup_name ON | デフォルト]
   | [(COMPRESSION_DELAY = {0 |とクラスターCOLUMNSTORE 遅延[分]})] 
      [filegroup_name ON | デフォルト] 
  
}

1、非クラスタ化インデックス

クエリはorder by句を含む場合index_column>値の範囲と他の走査動作は、非クラスタ化インデックスを推奨場合、又は含みます。

2、ハッシュインデックス

ハッシュインデックスは、例えば、ポイント・ルックアップ(ポイントルックアップ)、index_column =値、範囲スキャンが推奨されるのではなく、ハッシュ・インデックスに特に適しています。

第二に、メモリ非クラスタ化インデックスの内部構造

メモリ同様の非クラスタ化インデックスのBツリー構造、BW-ツリーを参照し、新しいBツリー構造です。ハイレベルの観点からは、BW-ツリーは、ページのページIDマッピングに従って組織として理解することができます。

BW-ツリー構造で、各注文ページインデックスキーの集合を有するキーがサイズの順に配置され、(構造は、従来のBツリーに類似している)、およびインデックスは、階層構造、サブレベルの親レベルを含みます、リーフレベルのデータ行を指します。

差BW-ツリーは、複数のデータ線に接続することができ、ページポインタがレベル論理ページIDであり、IDは、実際にページマッピングテーブルのオフセットの論理ページ、各ページを有するマッピングテーブルであります各ページの物理アドレスは、オフセット実際の物理メモリアドレスを検索します。

メモリ内の非クラスタ化インデックスは、これを達成するためには、インデックスページ(場所更新中)ない場所の更新はありません、新しい更新メカニズムの導入:

  • ページを更新するときは、ラッチとロックする必要はありません。
  • インデックス・ページ・サイズは固定されていません

非リーフ・レベルでは、パレンタルレベルのキー値は、それが子キーページの最大値を指すページに格納され、さらに、ページの各列は、論理ページID(オフセット)を備えています。リーフレベルのデータページは、ページの物理アドレスが含まれているだけでなく、キーが含まれています。

第三に、ハッシュインデックスの内部構造

ハッシュインデックスはポインタからなるアレイを備え、アレイ内の各タプルは、ハッシュバケットと呼ばれます。

  • 各ハッシュバケット占有8バイト、キーのエントリポイントのリストからなるチェーン
  • 各エントリは、インデックス・キー値、対応するデータ線とポインタ・エントリを指し示すアドレスから本質的になります
  • 各エントリは、このようにして、チェーン内の次のエントリを指すポインタを有する鎖状構造のエントリを構成します

ときインデックス定義ハッシュバケットの数を指定する必要があります。

  • ハッシュインデックスのハッシュバケットの最大数は1,073,741,824です
  • リンクリストより良い性能の比較的長鎖の短いリスト
  • パフォーマンスの悪い、リンクされたリストに各ハッシュバケットポイントの長さより長い、ハッシュ・バケット番号の数とテーブル内の一意の値の比より低いです。したがって、ハッシュバケットの数を増やすことが適切です。
  • 理想的には、一意の値のハッシュバケット表に好ましくは1〜2倍の数。

 

参照文献:

インデックス建築・デザイン

おすすめ

転載: www.cnblogs.com/ljhdo/p/10533688.html