SQL Server のチューニングについてまとめてみる - その2 - ( フィルタ選択されたインデックス )
今日、ふと気づいたのですが、『 SQL Server のチューニングについてまとめてみる 』シリーズは『 その1 』で終わってましたね (笑) その1 で終わるのもどうかと思ったので、その2 をまとめてみたいと思います。( 適当すぎる.... ) 今回は、SQL Server 2008 から機能追加された、フィルタ選択されたインデックスについて説明します。
フィルタ選択されたインデックスは、例えば、テーブルのあるフィールドの内容が大部分 NULL の場合、そのフィールドの値が NULL ではないレコードだけを含むインデックスを作成することができます。( フィルター条件は Where 句に指定するような感じです。 )
いつもの、AdventureWorks データベースで実験してみましょう。対象とするテーブルは、Sales.SalesOrderDetail です。
CarrierTrackingNumber 列にインデックスを作成します。
Leaf レベルの行数が、『121317件』で、総件数と一致しています。
同様にCarrierTrackingNumber 列にインデックスを作成します。ただし、今回は、フィルターの条件に、『 CarrierTrackingNumber IS NOT NULL 』を設定します。
Leaf レベルの行数が、『60919件』で、NULL のレコードを除いた行数と一致しています。
フィルタ選択されたインデックスを使用することで、ある条件に合致した効率的な検索を行うことができます。あと、インデックスに格納される物理的な行数も減少するため、I / O 負荷も減るでしょうし、高速化もされるのでしょう。
※しかし、業務的を加味したインデックス設計は結構難しそうです。結構経験も必要そうですが...