• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベースのインデックスについての基本的な質問)

データベースのインデックスについての基本的な質問

このQ&Aのポイント
  • データベースのインデックスについての基本的な質問についてまとめました。
  • テーブルAとBの結合に関して、インデックスの作成がパフォーマンス改善に寄与することが分かりましたが、大量のテストデータを追加する場合のインデックスの保守について質問があります。
  • Oracle 11gを使用している状況で、負荷テスト後にもデータベースのインデックスの保守が必要かどうか、必要な場合の具体的な方法を教えてください。

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

ALTER INDEX REBUILD ONLINE はしたほうが速くなると思います。 普通、大量のデータをinsertする際にはindexを一旦消し、(drop index) insert後に作成(create index)するとinsertが早く終わります。 データベースを何かの順位で読む際にはソートされて順に読み出されていきます。 インデックスを作っておくとソートがいらないのでその分早くなるというわけです。 今回のように大量にデータを入れた際にはインデックスもかなり複雑に絡まっていて 読みだすのに時間がかかる状態になっています。

rio_grande
質問者

お礼

ご回答有難うございました。

その他の回答 (1)

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

>一般的に必要なものなのかどうか そもそもINDEX REBUILDが「必要」な場合は、頻繁に削除をするような場合です。そうでない限りは一般的には不要です。特にテストデータを大量に投入した直後なら、おそらくとてもきれいな状態でしょうからでさらに不要な状態である可能性が高いでしょう。 行の追加だけの場合でも、インデックス対象のカラムの値の分布に偏りがある場合には、インデックスのBツリー構造に偏りが発生する可能性があります。ただ、必要になるほどの偏りを発生させるのは困難ですので、狙って値をばらけさせている場合でもなければ不要でしょう。特にただの連番だったらさらに必要ないでしょう。 でここまでが一般論です。 数百万件のデータを扱うということなら学生の勉強や個人の趣味でやっているわけではなく、おそらく仕事でやっているのですよね。だったら想像でやってたらダメですよ。最低限INDEX REBUILDコマンド実行前の状態を確認すること。そして現在リビルドが必要な状態なのかどうかを確認すること。ここまでは必ず行いましょう。 その上でコマンドを実行したのなら、できればコマンド実行後の状態も確認しリビルドを行った成果が出て改善しているのかどうか確認すること。 リビルド実行前と後で数値を比較すれば、改善されたのかされていないのか、意味のある作業なのか無意味な作業なのかはっきりします。効果がありそうと分かったのなら、次からは無条件で行うようにしてもいいと思います。レベルの低いSEですと「なんかよく分からないけど念のため」で常になんとなくで無条件で作業をする人もかなりの数います。そういう人になってはいけません。 状況から必要な作業かどうかを判断する。そして必要な作業だけを実行する。必要の無い作業は行わないようにする。3年目以降ならそんなふうに考えて作業をできるようになったほうがいいでしょう。新人ならほかに覚えることが多いかもしれませんので、仕方がないかもしれませんが。 索引(インデックス)の断片化の確認方法と対処方法 (オラクルエンジニア通信 - 技術資料、マニュアル、セミナー) https://blogs.oracle.com/oracle4engineer/entry/column_index_fragmentation 第6回 パフォーマンスの基礎である索引について http://www.oracle.com/technetwork/jp/database/articles/tsushima/tsm06-1598252-ja.html >必要な場合は具体的にどのようにやるのか教えて頂きたいです。 「どのようにやるのか」の意味がよく分かりませんが。あなたの調べたコマンドを普通に実行してください。念のためデータの追加削除や検索もない状態で行うことがいいとは思いますが、追加削除の最中でも可能になっているはずです。 もしもそもそもOracleのコマンドを実行する方法が分からないということなら…、それくらいは自分で調べられるようになったほうがいいと思いますよ。

rio_grande
質問者

お礼

ご回答有難うございました。

関連するQ&A