- ベストアンサー
Oracleでの検索スピード
質問です。 テーブルのレコード数の増加に伴い、テーブルのExtentの数が200を超えてしまいました。検索のスピードもどんどん遅くなってきています。 このようにExtentが増加することによりが検索スピードに影響を与えるものでしょうか? また、検索スピードを上げるためにはどうしたらよいのかも教えてください。索引をはったり、Analyzeを実行したりしようかとも考えていますが、どのような方法が有効であるのか分かりません。 よろしくお願いします。 以上
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Extentが増えると、データが断片化されるため、当然、スピードは低下します。 検索スピードを上げる方法としては、大きく次のようになります。 索引のチューニング SQL文のチューニング ディスクI/Oのチューニング メモリーのチューニング OSのチューニング となります。(上に行くほど効果が大きい) 基本は、索引とSQL文のチューニングになりますが、3番目のディスクI/OのチューニングがExtentの問題になります。 特に、全件検索が多く(索引を使えない検索)削除などが多い場合に有効になります。その場合は、基本的には、テーブルの再作成(テンポラリテーブルを使ってする方法)があります。 私も、削除が非常に多いテーブルに対し、これを行うことで10倍ぐらいのパフォーマンスを得ることができました。
その他の回答 (3)
- yu-ji
- ベストアンサー率19% (15/78)
インデックスをはるのは検索に関しては効果的ですが、有効なはり方をしないと更新のスピードに影響を与えますのでご注意下さい。
- redbean
- ベストアンサー率38% (130/334)
バージョン8以上のことは分からないのですが、一番始め に考えるのは、やはりインデックスをはることでしょう。 うまくやれば、検索時間を数分の1から数十分の1に縮め ることができます。 RDBに精通した人がやるのが望ましいのですが、原始的 (?)には、速くしたいSQL文のWHERE句にでてくる項目 を、上から順にインデックスのCREATE文に書いてしまえ ばいいでしょう。 あまり多くの項目にインデックスの項目をはると、insert 文が遅くなるかもしれませんが、その時はあまり値の変化 しない項目(例えば「性別」のような)をインデックスか ら外していけばいいと思います。 インデックスの効果があまりないような場合は、専門家に 依頼するのが一番でしょう。 副問い合わせを使いたくなるような複雑な検索では、SQL 文の巧拙によっても検索時間がまったく変わりますが、 書き直すと再テストが必要になってしまいますので、これ は質問の範囲外でしょうね。
お礼
ありがとうございました。 やはりインデックスが有効なのですね。 検討してみます。
- cse_ri
- ベストアンサー率29% (74/253)
一般的な傾向として、レコード数が増加すればする程、検索のレスポンスは 悪化する傾向があります。これはExtentが増加しないように大きめの テーブルスペースを確保していても発生する現象です。 Oracleのバージョンが書かれていないので、Oracle8以上を前提にコメント しますが、データ量が非常に大きいテーブルをアクセスする場合、データを 複数のテーブルスペースに分割して格納する方法(パーティションテーブル) が一番効果があります。 もちろん、それ以前に最適なインデックスを作成するなどの一般的なチュー ニングも必要です。 Oracleのチューニングのスキルがある人がOracleのログを解析すれば、 どういうチューニングが効果的かはだいたい判別できます。 ご自分でスキルが足りなければ、Oracleに精通したSI会社にチューニング の部分を外注することをオススメします。
お礼
ありがとうございました。 検討してみます。
お礼
ありがとうございました。 検討してみます。