アプリ版:「スタンプのみでお礼する」機能のリリースについて

表領域のパーティション分割時のINDEXについて質問があります。

下記の様な構成の時、グローバルINDEXとローカルINDEXはどの様に張るべきでしょうか。
今現在は、下記の<現状の構想>の通りにINDEXを作成しようかと考えています。
しかしながら、検索時に項目B&項目Cのwhere句で効率よく領域を選択(検索)できるのか悩んでいます。
機器の問題で実際に試す事ができず、悶々としています。

情報の不足がございましたら、ご指摘下しさい。
ご回答お待ちしています。

<前提>
・表Aへのアクセス:where 項目B = n and 項目C = m
・表Aのレコード数は8000万程度

<現状での構想>
・表Aの領域をパーティション分割(項目Bのハッシュ)
・グローバルINDEXは項目B&項目C
・ローカルINDEXはなし

A 回答 (1件)

項目Bがパーティションキーなので、パーティションプルーニングによる絞込みが効きますね。


よって、項目Cのローカルインデックスが一番効率が良くなると思います。
B+Cのグローバルインデックスでも遜色ないアクセス速度が出ますが、インデックス長が大きくなる分データサイズがより大きくなって、キャッシュもより多く消費するのと、パーティション削除などのパーティションメンテナンスをする場合にグローバルインデックスだとインデックスリビルドが必要となるので、この場合、Cローカルが勝ります。

しかし、試せないというのはよろしくないですね。
本番環境以外は貧弱すぎてデータが入らない、などでしょうか?
Oracleはパフォーマンス面では理論やサポートの回答だけではなかなか判断がつかないことが多いため、かならず実践での裏づけを得て対処を選択すべきと考えています。

サーバに入れられないのであれば、開発用PCにエクスプレスエディションを入れるなりして、トレースをかけて実際のブロックアクセス数を確認したいですね。
    • good
    • 0
この回答へのお礼

ご回答およびデータサイズ・キャッシュに関するご指摘ありがとうございます。
確かにメンテナンスなどを考えると、ローカルインデックス:項目Cとした方が良さそうです。

>開発用PCにエクスプレスエディションを入れるなりして、
その手がありましたね。
頭からすっぽり抜けていました。

どこまで擬似環境が作成できるかわかりませんが、
ご回答のパターン等を擬似環境で実測してみます。

助かりました。
本当にありがとうござます。

お礼日時:2009/10/04 15:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!