• ベストアンサー

Oracleでの検索スピード

質問です。 テーブルのレコード数の増加に伴い、テーブルのExtentの数が200を超えてしまいました。検索のスピードもどんどん遅くなってきています。 このようにExtentが増加することによりが検索スピードに影響を与えるものでしょうか? また、検索スピードを上げるためにはどうしたらよいのかも教えてください。索引をはったり、Analyzeを実行したりしようかとも考えていますが、どのような方法が有効であるのか分かりません。 よろしくお願いします。 以上

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

  • ベストアンサー
  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

Extentが増えると、データが断片化されるため、当然、スピードは低下します。 検索スピードを上げる方法としては、大きく次のようになります。 索引のチューニング SQL文のチューニング ディスクI/Oのチューニング メモリーのチューニング OSのチューニング となります。(上に行くほど効果が大きい) 基本は、索引とSQL文のチューニングになりますが、3番目のディスクI/OのチューニングがExtentの問題になります。 特に、全件検索が多く(索引を使えない検索)削除などが多い場合に有効になります。その場合は、基本的には、テーブルの再作成(テンポラリテーブルを使ってする方法)があります。 私も、削除が非常に多いテーブルに対し、これを行うことで10倍ぐらいのパフォーマンスを得ることができました。

mymilky
質問者

お礼

ありがとうございました。 検討してみます。

その他の回答 (3)

  • yu-ji
  • ベストアンサー率19% (15/78)
回答No.4

インデックスをはるのは検索に関しては効果的ですが、有効なはり方をしないと更新のスピードに影響を与えますのでご注意下さい。

  • redbean
  • ベストアンサー率38% (130/334)
回答No.2

バージョン8以上のことは分からないのですが、一番始め に考えるのは、やはりインデックスをはることでしょう。 うまくやれば、検索時間を数分の1から数十分の1に縮め ることができます。 RDBに精通した人がやるのが望ましいのですが、原始的 (?)には、速くしたいSQL文のWHERE句にでてくる項目 を、上から順にインデックスのCREATE文に書いてしまえ ばいいでしょう。 あまり多くの項目にインデックスの項目をはると、insert 文が遅くなるかもしれませんが、その時はあまり値の変化 しない項目(例えば「性別」のような)をインデックスか ら外していけばいいと思います。 インデックスの効果があまりないような場合は、専門家に 依頼するのが一番でしょう。 副問い合わせを使いたくなるような複雑な検索では、SQL 文の巧拙によっても検索時間がまったく変わりますが、 書き直すと再テストが必要になってしまいますので、これ は質問の範囲外でしょうね。

mymilky
質問者

お礼

ありがとうございました。 やはりインデックスが有効なのですね。 検討してみます。

  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.1

一般的な傾向として、レコード数が増加すればする程、検索のレスポンスは 悪化する傾向があります。これはExtentが増加しないように大きめの テーブルスペースを確保していても発生する現象です。 Oracleのバージョンが書かれていないので、Oracle8以上を前提にコメント しますが、データ量が非常に大きいテーブルをアクセスする場合、データを 複数のテーブルスペースに分割して格納する方法(パーティションテーブル) が一番効果があります。 もちろん、それ以前に最適なインデックスを作成するなどの一般的なチュー ニングも必要です。 Oracleのチューニングのスキルがある人がOracleのログを解析すれば、 どういうチューニングが効果的かはだいたい判別できます。 ご自分でスキルが足りなければ、Oracleに精通したSI会社にチューニング の部分を外注することをオススメします。

mymilky
質問者

お礼

ありがとうございました。 検討してみます。

関連するQ&A