2011-05-01 19 views
0

私は現在Java/DB2バックエンドのWebアプリケーションを開発中のジュニア開発者です。データベースは現在最適化されていないので、改善の余地があります。問題は私がこれについての経験がなく、誰も私を助けることができないということだけです。 複数のWHERE条件に基づいて選択クエリを最適化する

SomeTableName 
MyPkey 
ColOne 
ColTwo 
ColThree 
ColFour 
ColFive 

は、私はこれらのようなクエリのためのデータベースを最適化する方法を把握しようとしていた。

SELECT * FROM SomeTableName WHERE ColOne = 'some value' 
SELECT * FROM SomeTableName WHERE ColOne = 'some value' AND ColTwo = 'another' 
SELECT * FROM SomeTableName WHERE ColFive = 11 AND ColThree = 'hello world' 
SELECT * FROM SomeTableName WHERE ColOne = 'hi' AND ColTwo = 'val1' AND ColThree = 'val2' AND ColFour = 'val3' AND ColFive = 'val4' 

私は、SELECT文は異なる列の組み合わせを持っているWHERE条件を持っている描写しようとしています値と私はどのようにこのようなクエリを最適化するか分からない。

アドバイスはありますか?

EDIT:DB2が独自の最適化を追加するかどうかはわかりませんが、いずれの列にもインデックスが設定されていないことは確かです。

+0

最初に見ておくべきは、テーブル定義ですが、JavaやDB2についてはあまりよく分かりませんので、詳細を教えてください。ほとんどのSQLの状況では、このようなクエリは、適切なインデックスがあることを確認することで大幅に改善できます。 – Henry

+0

データベースにはインデックスがありません。私は1つ前に作成することを考えましたが、それを設定する方法はわかりませんでした(つまり、1つのインデックスで1つのインデックスを作成する必要がありますか?または1つのインデックスで複数の列を作成する必要がありますか?) –

+0

ほとんどの場合、 DB。遅い場合は、テーブルにインデックスを追加する必要があります。それらがなければ、毎回フルテーブルスキャンを実行しています。 –

答えて

0

あなたは間違いなくあなたのデータベースのインデックスで遊ぶべきです。挿入と更新はより高価になりますが、クエリがより高速に実行されるため、おそらく全体的に大きな勝利になるでしょう。インデックスは、多数の値を持つ列(ジェンダー列ではそれほど重要でない列)に対して最も効果的です。どこの条件で多く参照する列に対して効果的です。索引を試すときは、データベースの照会オプティマイザーがSQL EXPLAIN verbまたはdb2explnのようなツールを使用しているかどうかを確認してください。

0

あなたの例では、すでにcolOneのインデックスを作成するだけで、いくつかのパフォーマンスが得られるようです。 基本的には、使用するインデックスと同じ順序で列を使用してください。

0

(colOne、colTwo、colThree、colFour、colFive)にインデックスを作成すると、パフォーマンスが大幅に向上します。クエリー1,2、および4はすべてそれを使用します。

関連する問題