ぶりりあんとろーど(仮)

2010-03-04

[]付加列インデックス


SqlServerではカバリングインデックスの欠点を補うものとして

付加列インデックスというものがある。


まず、カバリングインデックスとは非クラスタインデックスを応用したものである。

通常の非クラスタインデックスは主に検索条件に使用する項目につけるが

SELECTの列もインデックスに含めることによりクエリインデックス内だけで完結するようし、

データページへのアクセスを減らす手法のこと。


以下のようなSQLカバリングインデックスで処理しようとした場合、

SELECT col_1,col_2,col_3 FROM tbl_hoge WHERE col_3 = 'harada'

CREATE INDEX idx1_hoge ON tbl_hoge(col_3,col_1,col_2)

上記の場合、col_1,col_2は抽出条件ではないがインデックスに含めることにより

インデックス内だけでデータが取得できるようになる。




ただし、SELECTの項目をインデックスに含めてしまうとその分サイズが大きくなってしまう。

それを解消するのが付加列インデックスである。



カバリングインデックスではtreeの階層が深くなると検索条件ではないがインデックス付加した列も

中間ページにも含まれてしまいサイズが増大する。

しかし、付加列インデックスでは末尾のリーフページにしか付加した列が作成されない。

これによってサイズの増加を防ぐことができる。


なお、中間ページに含まれないということは抽出条件にその列が含まれても検索は高速化されない。


作成方法は以下の通り。includeオプションに付加する列を指定する。

CREATE INDEX idx1_hoge ON tbl_hoge(col_3)include(col_1,col_2)



動作確認環境:SqlServer 2008 Express

aa 2010/03/06 03:29 >中間ページに含まれないということは抽出条件にその列が含まれても検索は高速化されない。
そんなことはない。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証