• 検索結果がありません。

CREATE INDEX 製品_種別_idx ON 製品表 ( 種別 );

ドキュメント内 Slide 1 (ページ 33-38)

CREATE INDEX

製品

_

分類

_idx ON

製品表

(

分類

);

CREATE INDEX 製品_種別_idx ON

製品表

(

種別

);

複合索引

複数列にまとめて一つの索引を作成

• 単一列索引と複合索引の作成例

• 複合索引の構造

指定した索引列のデータが、指定した列の順にソートされて、リーフ・ブロックに 格納される

単一列索引を

3

つ読み、マージするよりも効率的

複合索引(コンポジット索引)

複合索引の構造

親コード 分類 種別

1 A

ROWID

1 A

ROWID

1 A

ROWID

1 B

ROWID

1 B

ROWID

1 C

ROWID

2 A

ROWID

2 A

ROWID

2 B

ROWID

2 C

ROWID

2 C

ROWID

3 A

ROWID

・・・ ・・・ ・・・ ・・・

ルート ブロック

ブランチ ブロック

リーフ ブロック

一つ目のキー列を元に B*Treeのツリー構造が構成

親コード 分類 種別 製品名

1 A

XXX

3 B

XXX

・・・ ・・・ ・・・ ・・・

2 A

XXX

3 C

XXX

・・・ ・・・ ・・・ ・・・

3 C

XXX

2 A

XXX

・・・ ・・・ ・・・ ・・・

1 B

XXX

2 B

XXX

・・・ ・・・ ・・・ ・・・

各キー列値ごとに階層的に ソートされて格納されている

複合索引(コンポジット索引)

複合索引の検索イメージ

SELECT * FROM

製品表

WHERE 親コード=1

AND 分類 =‘A’

AND

種別

=

‘う’

;

親コード 分類 種別

1 A

ROWID

1 A

ROWID

1 A

ROWID

1 B

ROWID

1 B

ROWID

1 C

ROWID

2 A

ROWID

2 A

ROWID

2 B

ROWID

2 C

ROWID

2 C

ROWID

3 A

ROWID

SELECT * FROM

製品表

WHERE 親コード=1

AND 分類=‘A’;

親コード 分類 種別

1 A

ROWID

1 A

ROWID

1 A

ROWID

1 B

ROWID

1 B

ROWID

1 C

ROWID

2 A

ROWID

2 A

ROWID

2 B

ROWID

2 C

ROWID

2 C

ROWID

3 A

ROWID

• 複合索引を使った検索例

索引を使って、複数の検索条件にあった行を絞り込みが可能

索引に含まれる全ての列を指定しなくても、複合索引をつかうことが可能

• 複合索引の対応条件とパフォーマンス

複合索引(コンポジット索引)

複合索引を利用できる条件

SELECT * FROM 製品表 WHERE 親コード =

AND 分類 =AND 種別 =;

○:WHERE句に条件あり

×:WHERE句に条件なし

・・・

・・・

・・・ △

・・・ ×

複合索引の使用がパフォーマンス最適 複合索引を使用可能

単一列索引より複合索引のほうが早いケースが多い

(列数や各列のサイズなどによって変わる)

9i

以降複合索引を使用可能

複合索引より単一列索引のほうが早いケースが多い

(パフォーマンスが最適かどうかはデータ構造などによる)

複合索引を使用不可

親コード 分類 種別

×

×

× ×

×

× ×

× ×

× × ×

WHRER

句の条件にどの列を使うかに

よって、索引を使用できるかどうか、

および、パフォーマンスが変わる

索引構成表

索引構成表とは

• データ全体を B*Tree 索引に格納している索引

索引のキー列だけでなく、その他の列(非キー列)もリーフブロックに格納 している索引

索引にアクセスするだけでデータが取得できるため、より高速な検索が可能

① 索引のリーフ・

ブロックから ROWIDを読む

ROWID

をもとに

表を検索

100

①索引キー列の 検索のみで データまで到達

エントリ・ヘッダ キー列 非キー列

Suzuki 東京 20000 100 ROWID

エントリ・ヘッダ キー列

<通常の索引を使用した検索> <索引構成表を使用した検索>

ドキュメント内 Slide 1 (ページ 33-38)

関連したドキュメント