表領域のパーティション分割時のINDEXについて

このQ&Aのポイント
  • 表領域のパーティション分割時のINDEXについて質問があります。
  • 表Aの領域をパーティション分割して、項目BのハッシュでグローバルINDEXを作成する予定ですが、検索時に項目B&項目Cのwhere句で効率よく領域を選択できるか悩んでいます。
  • 表Aのレコード数が8000万程度で、情報不足があるかもしれませんが、ご指摘いただければ幸いです。
回答を見る
  • ベストアンサー

表領域のパーティション分割時のINDEXについて

表領域のパーティション分割時のINDEXについて質問があります。 下記の様な構成の時、グローバルINDEXとローカルINDEXはどの様に張るべきでしょうか。 今現在は、下記の<現状の構想>の通りにINDEXを作成しようかと考えています。 しかしながら、検索時に項目B&項目Cのwhere句で効率よく領域を選択(検索)できるのか悩んでいます。 機器の問題で実際に試す事ができず、悶々としています。 情報の不足がございましたら、ご指摘下しさい。 ご回答お待ちしています。 <前提> ・表Aへのアクセス:where 項目B = n and 項目C = m ・表Aのレコード数は8000万程度 <現状での構想> ・表Aの領域をパーティション分割(項目Bのハッシュ) ・グローバルINDEXは項目B&項目C ・ローカルINDEXはなし

  • Oracle
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.1

項目Bがパーティションキーなので、パーティションプルーニングによる絞込みが効きますね。 よって、項目Cのローカルインデックスが一番効率が良くなると思います。 B+Cのグローバルインデックスでも遜色ないアクセス速度が出ますが、インデックス長が大きくなる分データサイズがより大きくなって、キャッシュもより多く消費するのと、パーティション削除などのパーティションメンテナンスをする場合にグローバルインデックスだとインデックスリビルドが必要となるので、この場合、Cローカルが勝ります。 しかし、試せないというのはよろしくないですね。 本番環境以外は貧弱すぎてデータが入らない、などでしょうか? Oracleはパフォーマンス面では理論やサポートの回答だけではなかなか判断がつかないことが多いため、かならず実践での裏づけを得て対処を選択すべきと考えています。 サーバに入れられないのであれば、開発用PCにエクスプレスエディションを入れるなりして、トレースをかけて実際のブロックアクセス数を確認したいですね。

sekidoutyokka
質問者

お礼

ご回答およびデータサイズ・キャッシュに関するご指摘ありがとうございます。 確かにメンテナンスなどを考えると、ローカルインデックス:項目Cとした方が良さそうです。 >開発用PCにエクスプレスエディションを入れるなりして、 その手がありましたね。 頭からすっぽり抜けていました。 どこまで擬似環境が作成できるかわかりませんが、 ご回答のパターン等を擬似環境で実測してみます。 助かりました。 本当にありがとうござます。

関連するQ&A

  • SQL*LOADER実行時の一時領域について

    いつもお世話になります。m(__)m Oracle 8i パーティション分割した表へSQL*LOADER(ダイレクトパス)を使用しデータをロードした場合での、 インデックス作成時に使用される一時領域について教えて下さい。 (1)パーティションがA、Bとあり共にデータが登録済み (2)AのパーティションのみをTRUNCATE (3)Aに該当するデータのみをSQL*LOADERでロード この場合、SQL*LOADERでインデックスが作成される時に使用される一時領域はAのみでしょうか? それともA+Bの領域が必要となるのでしょうか?

  • パーテーションの分割について

    パーテーションの分割について 以前インストールしていたWindows 7RC及びXPを削除して、新たに7をインストールしたのですが、未割り当て領域が二つに分割されているので、これを一つにまとめることはできませんか? C:150GB D:残りすべて としたいのですが・・・

  • 表の結合(性能)

    2つのテーブルを(内部)結合させる場合、 INNER JOINによる結合と WHERE句に結合条件を記述する2通りの方法が あると思いますが、どちらが早いのでしょうか? なお、Oracle9i、ルールベースにて構築されています。 テーブルの内容、SQL文は下記のとおりです。 ご教授よろしくお願いします。 ■表 A 項目A-1 ・・・PRIMARY KEY1、INDEX1 項目A-2 ・・・PRIMARY KEY2、INDEX2 項目A-3 ・・・PRIMARY KEY3 項目A-4 ■表 B 項目B-1 ・・・PRIMARY KEY1、INDEX1 項目B-2 ・・・PRIMARY KEY2、INDEX2 項目B-3 ・・・PRIMARY KEY3 項目B-4 ※項目A-1と項目B-1にて結合。  項目A-2が"01"と等しいレコード。 表Aのレコード件数>表Bのレコード件数 【WHERE句にて結合】 SELECT * FROM A,B where A.項目1 = B.項目1 and A.項目2 = '01' 【INNER JOINにて結合】 SELECT * FROM A INNER JOIN A ON A.項目1 = B.項目1 AND A.項目2 = '01'

  • HDDパーティション分割ソフトについて

    160GBディスク全体をCドライブとして使っていますが、システム領域とデータ領域を別ドライブとするためパーティションの分割を考えています。 パーティション分割ソフトは「Nortonパーティションマジック」が有名でWindows 2000の時に使っていましたが、ソースネクストの「アクロニス パーティションエキスパート パーソナル」はずいぶん安価です。 「パーティションマジック」で出来るのと同じようにデータを残したままでパーティションの分割をしたいのですが、「アクロニス パーティションエキスパート パーソナル」の使い心地は如何でしょうか? 分割前にデータのバックアップはしますが、あまりにも値段が違うのでいささか気懸かりです。

  • Win7パーティション分割

    win7 Proです。 HDDにCドライブしかないので、パーティション分割してDドライブを作成したいのですが、 Dドライブをフォーマットしようとすると、ダイナミックに変換します。と出ます。 ベーシックのままパーティション分割できないのでしょうか? 現在は未割り当ての領域が180GBあります。

  • パーティションの分割ができない・・・

    DELLでノートPCを買ったので、パーティションの分割をしたのですができませんでした。 既に、不明(78MBのEISA構成)・RECOVERY(D:)・OS(C:)・不明(2.5GBプライマリパーティション)に分けられていました。 そこで、Cから66.56GBを分けたのですが、「十分なディスク領域がないので、この操作を完了できません」というメッセージが出て未割り当てのままです。 調べたところ、1つのHDDは4つまでしか分割できないとのことでした。 Dを削除して分割しなおせばいいのかなと思って、DのファイルをCにコピーしてみましたが、あまりうまくいかず・・・。 私としては、映像や音楽を別に保存しておきたいので、どうしても分割したいです。 何か良い方法はありませんか? やはり、市販のソフトや、リカバリをしないといけないのでしょうか。 機種は、DELLのInspiron1520で、OSはVISTA Premiumです。

  • 希望の量でパーティションを分割できない

    Vistaの[コンピュータの管理]からHDDのパーティションを分割するのに 希望の量で分割できないないので、知恵を貸して下さい。 ---------------- 現状 ----------------- HDDは、320GBでリカバリー直後 OSと購入時のアプリが少しとブラウザ(Firefox)が導入済み その状態でディスク0は、名無しのボリュームが9.77GB(EISA構成) Cドライブは、288GB中、空き領域263GB(91%の空き領域) ---------------- したいこと ----------------- Cドライブを100GBにし、残りをDドライブにしたい ---------------- 不具合 ----------------- 「ボリュームの圧縮」で「圧縮可能な領域のサイズ」が、102346MB(100GB) しかないので理想(180GB)の量のDドライブが作れない -------------------------------------------- といった感じです。仕方ないので、C・180、D・100で一度切ってみましたが まだ理想の量ではありません。 (以前、機能制限で半分しかパーティションが切れないと聞いたことはありますが この量では半分に達していないので、原因がわかりません) どなたか、知恵をお貸し下さい。

  • DISKのパーティション分割

    DISKのパーティション分割の操作をしたが、最後のVOL作成で下記メッセージが表示され、分割できない。 「ディスクに存在するパーティションの数が既に上限に達しているため、 この未割り当て領域には新しいボリュームを作成できません」 DISKのMAPは以下のようになっている。 78MB正常(EISA)|RECOVERY(D:)10.00GB NTFS正常 |OS(c:)69.92BG NTFS正常|29.3GB(未割当) |2.5GB正常 どなたか原因と対策方法をご存知ないですか。

  • Windows7のパーティション分割について

    ノートパソコンを買い、Windows7の管理ツール->ディスクの管理からCドライブを「ボリュームを縮小」により縮小しました。 結果「未割り当て領域」が100G出来たので、Linux(centOS6)を入れデュアルブート環境にしようと試みました。 しかしながら、LinuxのインストールDVDから「空き領域にLinuxをインストールする」、「カスタムインストール」を選択しても、パーティション設定時に「No Empty」とかいうエラーが出ました。 ちゃんと空き領域100Gが認識されているのですが・・・。 WindowsXPの時は、EaseusというソフトからWindows領域を圧縮しLinuxを入れられました。 Windows7はパーティション圧縮・分割ツールが標準で入っているということで使用したのですが。 どのようにすればLinuxのインストールDVDにWindows7から出来たパーティション領域を認識してもらえるのでしょうか?

  • パーテーションを分割して2つのOSを使いたい

    現在、120GBにHDDにWindows Vistaを入れて使っています。 CドライブがOSでDドライブがリカバリ領域になっています。 Vistaを使っているとVistaでは使用できないソフトやツールが結構あって困るのでパーテーションを分割して、1つのHDDにVistaとXPの2つをインストールしたいと思っています。 が、VistaはHPのOEM版でCDからブートしても再セットアップ中にはパーテーション分割の画面は出てこないのでどうすればいいかわかりません。 たとえ分割できてもどうやって新しくできたパーテーションにXPをインストールすればいいのかもわかりませんし、どちらかを再セットアップしようとするといったいどうなるかもわかりません。 わからないことだらけなのでここで不安をすべて払拭したく、質問させていただきました。 よろしくお願いします。