OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Oracleでの検索スピード

  • すぐに回答を!
  • 質問No.112976
  • 閲覧数291
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 35% (5/14)

質問です。
テーブルのレコード数の増加に伴い、テーブルのExtentの数が200を超えてしまいました。検索のスピードもどんどん遅くなってきています。
このようにExtentが増加することによりが検索スピードに影響を与えるものでしょうか?

また、検索スピードを上げるためにはどうしたらよいのかも教えてください。索引をはったり、Analyzeを実行したりしようかとも考えていますが、どのような方法が有効であるのか分かりません。

よろしくお願いします。

以上
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル10

ベストアンサー率 42% (79/186)

Extentが増えると、データが断片化されるため、当然、スピードは低下します。

検索スピードを上げる方法としては、大きく次のようになります。

索引のチューニング
SQL文のチューニング
ディスクI/Oのチューニング
メモリーのチューニング
OSのチューニング

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

お礼率 35% (5/14)

ありがとうございました。
検討してみます。
投稿日時 - 2001-08-03 09:52:05
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル11

ベストアンサー率 29% (74/253)

一般的な傾向として、レコード数が増加すればする程、検索のレスポンスは 悪化する傾向があります。これはExtentが増加しないように大きめの テーブルスペースを確保していても発生する現象です。 Oracleのバージョンが書かれていないので、Oracle8以上を前提にコメント しますが、データ量が非常に大きいテーブルをアクセスする場合、データを 複数のテーブルスペースに分割して格納する方法(パー ...続きを読む
一般的な傾向として、レコード数が増加すればする程、検索のレスポンスは
悪化する傾向があります。これはExtentが増加しないように大きめの
テーブルスペースを確保していても発生する現象です。

Oracleのバージョンが書かれていないので、Oracle8以上を前提にコメント
しますが、データ量が非常に大きいテーブルをアクセスする場合、データを
複数のテーブルスペースに分割して格納する方法(パーティションテーブル)
が一番効果があります。

もちろん、それ以前に最適なインデックスを作成するなどの一般的なチュー
ニングも必要です。
Oracleのチューニングのスキルがある人がOracleのログを解析すれば、
どういうチューニングが効果的かはだいたい判別できます。

ご自分でスキルが足りなければ、Oracleに精通したSI会社にチューニング
の部分を外注することをオススメします。
お礼コメント
mymilky

お礼率 35% (5/14)

ありがとうございました。
検討してみます。
投稿日時 - 2001-08-03 09:55:23
  • 回答No.2
レベル11

ベストアンサー率 38% (130/334)

バージョン8以上のことは分からないのですが、一番始め に考えるのは、やはりインデックスをはることでしょう。 うまくやれば、検索時間を数分の1から数十分の1に縮め ることができます。 RDBに精通した人がやるのが望ましいのですが、原始的 (?)には、速くしたいSQL文のWHERE句にでてくる項目 を、上から順にインデックスのCREATE文に書いてしまえ ばいいでしょう。 あまり多 ...続きを読む
バージョン8以上のことは分からないのですが、一番始め
に考えるのは、やはりインデックスをはることでしょう。

うまくやれば、検索時間を数分の1から数十分の1に縮め
ることができます。

RDBに精通した人がやるのが望ましいのですが、原始的
(?)には、速くしたいSQL文のWHERE句にでてくる項目
を、上から順にインデックスのCREATE文に書いてしまえ
ばいいでしょう。

あまり多くの項目にインデックスの項目をはると、insert
文が遅くなるかもしれませんが、その時はあまり値の変化
しない項目(例えば「性別」のような)をインデックスか
ら外していけばいいと思います。

インデックスの効果があまりないような場合は、専門家に
依頼するのが一番でしょう。

副問い合わせを使いたくなるような複雑な検索では、SQL
文の巧拙によっても検索時間がまったく変わりますが、
書き直すと再テストが必要になってしまいますので、これ
は質問の範囲外でしょうね。
お礼コメント
mymilky

お礼率 35% (5/14)

ありがとうございました。
やはりインデックスが有効なのですね。
検討してみます。
投稿日時 - 2001-08-03 09:53:13
  • 回答No.4
レベル9

ベストアンサー率 19% (15/78)

インデックスをはるのは検索に関しては効果的ですが、有効なはり方をしないと更新のスピードに影響を与えますのでご注意下さい。
インデックスをはるのは検索に関しては効果的ですが、有効なはり方をしないと更新のスピードに影響を与えますのでご注意下さい。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ