2

Oracle 12cデータベースで作業しています。 私はテーブルにたくさんの質問があります。 1つの問合せではwhere句で列AとBを使用し、別の問合せではwhere句でA、B、C、D & E列を使用します。私は質問をスピードアップしたい。他のインデックスのすべての列を含むOracleインデックス

は、私は私の第2のインデックスは、実際には最初のインデックス列を含み、2の非ユニーク索引、& B上の一方と上の一& & B C D & & Eを追加しました。これは正しいですか?技術的に間違っている?それともそれは、

異なる列でテーブルがクエリされる場合、インデックスのベストプラクティスは何ですか?インデックスの影響は何ですか?

答えて

4

この場合、インデックス(A、B、C、D、E)を持っているので、インデックス(A、B)は必要ありません。クエリは、インデックスの先頭部分を効果的に使用できます。索引は維持する必要があるため、索引はDML(索引、更新、削除)に影響します。

このように言えば、オプティマイザはインデックスを使用せず、フル・テーブル・スキャンを実行することを選択する可能性があります。これは安価であり、正常な動作です。たとえば、私のテーブルに100万行があり、そのクエリの50%が返された場合、インデックスを使用するのではなく、フルテーブルスキャンを実行する方がよいでしょう。

+0

ありがとうございました。 「...索引の主要部分を使うことができる」ということについて、私の最初の索引がA、Bの代わりにC、Dだったらどうなるでしょうか? ABCDEインデックスはC、Dインデックスもカバーしていますか?私もCを望むなら、D indexは別のインデックスとして宣言すべきでしょうか? –

+0

インデックスが(A、B、C、D、E)であり、C、Dのどこにある場合、オプティマイザ*はインデックススキップスキャン操作を使用することがあります。しかし、これらは正確にはコストがかかりにくいことが知られており、しばしばうまく機能しません。その場合、ちょうど(C、D)のインデックスが必要な場合があります。しかし、あなたはインデックスbloatとなるので、狂ったし、すべての組み合わせのインデックスを開始しないでください! – BobC

+0

haha​​ :)ありがとうBob、私は絶対に冗長なインデックスを持つデータベースを吹くつもりはない、私はグーグルと詳細を達成するために最適化ソリューションを勉強しています。 –

関連する問題