インデックスはクエリのパフォーマンスにどのように影響しますか?


12

明らかに、いくつかの異なるインデックスを保持することは、挿入および削除のパフォーマンスに悪影響を及ぼします。クエリのパフォーマンスはどうですか:テーブルに多くのインデックスを保持するのは理にかなっていますか?インデックスを追加するとクエリのパフォーマンスが向上しますか(もちろん、インデックスを使用するクエリの場合)、取得するためにすべてのインデックスを調べる必要があるため、インデックスが多すぎるとクエリのパフォーマンスが低下する可能性があります結果?

テーブルに異なるインデックスがある場合:それらはすべて考慮されるのか、オプティマイザーの観点からのみ最適なのか?Oracleは多次元インデックスを実装していますか?


2
これをテストして、結果を報告してみませんか?:)
ニールマクギガン

明日やります:)
パウエルック

2
インデックスは必ずしも削除の速度を落とすわけではありませんが、インデックスの速度を上げることもできます(更新がインデックスを利用できるように)
a_horse_with_no_name

@elチーフ、車輪の再発明のポイントは何ですか?そのため、挿入/削除が影響を受けることは確かですが、クエリのパフォーマンスへの影響は問題です。アップデートはどうですか?彼らは悪影響を受けますか?
サングラム

回答:


15

考慮すべきインデックスがさらにある場合、計画を生成するのに少し時間がかかりますが、その差が測定可能なほど大きくなるとは思いません。索引を削除した理由は、クエリのパフォーマンスが表示されません。一方、一般に、クエリをより効率的にするために使用されることがわかっている場合を除き、インデックスを作成しないでください。

以下からのOracleコンセプトガイド、ここでインデックスを作成するための基準があります。

一般に、次のいずれかの状況で列にインデックスを作成することを検討してください。

  • インデックス付けされた列は頻繁に照会され、テーブル内の行の総数のわずかな割合を返します。

  • 1つまたは複数のインデックス付き列に参照整合性制約が存在します。インデックスは、親テーブルの主キーを更新する場合、親テーブルにマージする場合、または親テーブルから削除する場合に必要となる完全なテーブルロックを回避する手段です。

  • 一意キー制約がテーブルに配置され、インデックスとすべてのインデックスオプションを手動で指定する必要があります。

すべてのインデックスは、クエリ内のテーブルのすべてのインデックスが使用可能かどうかを判断するために検査されるという意味で考慮されます。有用な可能性があるかどうかを判断するために、さらに調査することができます。


7

統計が最新である限り、コストベースのオプティマイザーは、使用するインデックスについて賢明な判断を下すべきです。そうでない場合は、ヒントを使用します。クエリを満たすために必要ではない列のインデックスを参照することはありません。


0

これは、アプリケーション開発者ガイドのインデックス戦略選択で見つけました。そのページは「インデックス戦略の選択」に関するものです。

各テーブルのインデックスの数を制限する

インデックスが多いほど、テーブルが変更されるときにオーバーヘッドが発生します。行が挿入または削除されると、テーブルのすべてのインデックスを更新する必要があります。列が更新されると、列のすべてのインデックスを更新する必要があります。

クエリのインデックスのパフォーマンス上の利点と更新のパフォーマンスオーバーヘッドを比較検討する必要があります。たとえば、テーブルが主に読み取り専用である場合、より多くのインデックスを使用できます。ただし、テーブルが頻繁に更新される場合は、使用するインデックスが少なくなる可能性があります。


2
質問から:「明らかに、いくつかの異なるインデックスを保持すると、挿入および削除のパフォーマンスにマイナスの影響があります。クエリのパフォーマンスはどうですか」
ジャックはtopanswers.xyzを試す11
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.