ServerSQLserverのインデックスのうちよく使われる基本的なインデックスであるクラスター化インデックス、非クラスター化インデックス、付加列について解説します。これらはSQLserverのクエリをチューニングするうえでの基礎となるので押さえておくとよいでしょう。以下のようなテーブルを例に説明します。1.クラスターインデックスクラスターインデックスは以下図のような構成となっています。'1002'を検索した場合ポイントとしては、クラスターインデックスのリーフノードにはテーブルのデータ部分が含まれていることでしょうか。クラスターインデックスがないテーブルの場合ヒープになりますが、ここではヒープの説明は割愛させていただきます。2.非クラスターインデックス非クラスターインデックスは以下図のような構成となっています。非クラスターインデックスのリーフには、実データへの参照先として、ヒープの場合は行識別子、クラスターインデックスが存在する場合はクラスターインデックスのキー列が含まれています。非クラスターインデックスのリーフだけで参照列が不足している場合には、行識別子やクラスターインデックスのキー列を使用してデータを取得します。非クラスターインデックスに付加列を追加した場合は以下図のような構成となります。検索し、FIRST_NAME、LAST_NAME,EMAILを取得したい場合WHERE句に使用される列を付加列を追加しても効果はありませんが、取得したい列が追加である場合に有効かと思います。複合インデックスの場合は中間リーフにもその列は含むことになります。WHERE句に使っていないが、参照したい列がある場合は付加列のインデックスを使うとよいでしょう。その列のデータ長が大きい場合、複合インデックスにすると中間リーフの1ページあたりのデータ量が多くなってしまうので、付加列を使用することで中間リーフの1ページあたりのデータの格納効率がよくなります。実際にクエリを実行して確認してみます。各種インデックスは次の通り。Lookup)が発生しています。非クラスターインデックス(NCIX_1)にはEMAIL列を含んでいないため、先に非クラスターインデックスを参照した後、キー参照にてクラスターインデックスを参照しています。イメージ的には以下のような形でしょうか。実際にページの読み取り数を確認すると、論理読み取り数が4であることが確認できます。Lookup)が発生していないことがわかります。実際にページの読み取り数を確認すると、論理読み取り数が2であり、非クラスターインデックスのみでデータを取得できていることがわかります。ちなみに今回は、下記のとおりインデックスの奥行はどちらも2であるため、各インデックスのページ読み取りは2でしたが、奥行が深くなると読み取り数はそれに応じて増えるかと思います。キー参照が発生するとその分参照するページ数が増加するので、極力減らすことが基本となります。Lookup)が発生していないことがわかります。ちなみにインデックスの奥行を調べたい場合は以下のような手順で確認できます。1オブジェクトエクスプローラーで調べたいインデックスを選択して、右クリックを押下し、「プロパティ(R)」を選択2左ペインの「断片化」を選択インデックスのページ数やリーフレベルの行、奥行をクエリで調べるなら下記のようなクエリで検索できます。※他の調査用に使っていたものの使いまわしであまりイケてないですが。BYTable_name,name,page_count出力結果は次のようになります。Server2016】dm_exec_input_bufferについて月別アーカイブはてなブログをはじめよう!utiowaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。