2017-10-12 6 views
0

私の知識が限られているので、この質問は奇妙かもしれません。ORACLE - インデックスはどのようにコストに関連していますか

私は何百万ものレコードを含むデータベースを最適化しようとしていますが、パフォーマンスがあるときは分かりません。私はSQL Developerの 'Explain plan'で遊んでいましたが、実際にはそれほど意味がありません。

ID | Creation_date | End_date | Critical_date | Flag 

私はこのように見て、このテーブルにクエリを実行実行します:

は例えば、私は、次の列を持つテーブルを持っ

SELECT COUNT(ID) FROM TABLE 
WHERE FLAG = 1 
Creation_date < :p_d_one 
End_date > : p_d_two 
Critical_date < :p_d_three 

これには、私の64のコストを与えますインデックスを追加することにしました。

今、私は理解していない事は、私がCREATION_DATEのインデックスを作成するときに、コストが大幅に低下することがある - >(64 - > 9)

CREATE INDEX TABLE_INDEX_CREATION_DATE ON TABLE (Creation_date desc) 

が、私は作成して、他のフィールドのインデックス(たとえ日付であっても)少し変化しません。

私のインデックスにそれを含める価値があるのであれば、 コストに影響がない場合でも、他のクエリのインデックスを作成する必要がありますか? データベースからのライブ統計を使用してコストを計算していますか(カーディナリティ、...)?

答えて

0

クエリに記載されているすべてのフィールド(この順番でflag, creation_date, end_date, critical_date, id)にインデックスを作成して、クエリがインデックスのみになるようにすることができます。つまり、RDBMSはテーブルをまったく読み込む必要はありません。インデックスから。

特定の問合せに対して、Oracleは特定の表に対して複数の索引を使用しません。複数の索引を持つことは、異なる照会をサポートするためにのみ必要です。

+0

あなたの答えは、エリック、私は私のインデックスにすべてのフィールドを含めることができます。 コストが変わらないクエリについては、新しいインデックスを作成する価値があると思いますか(テーブルにリンクされた多くのインデックスには良いとは言えません)。 – Moufett

+0

また、インデックスを作成すると他のプロセスが遅くなるので、できればそれらを避けることはできません。 – Moufett

+0

実際、最初の索引はデータへの最適なアクセス・パスです。索引を増やすと、問合せのパフォーマンスが向上しません。また、索引を増やすと、DML文のコストが高くなります。 –

関連する問題