2017-06-26 6 views
0

データベース内の「系列の値」の検索など、高速化するためにSQLインデックスを作成したいと考えています。各ValueSeriesに属し、日付を持っていますこれらのSQLインデックスは、必要以上に重複していますか?A以上、A + B以上ですか?

@Entity 
class Series { … } 

Value { 
    Series series; 
    Date date; 
    … 
    } 

シリーズの何百、何千もの値の多くを持つそれぞれがあります。

私は、多くの場合、2種類の検索を実行:

1)は、特定のシリーズ(どんなにその日付)に所属するすべての値を検索します。

2)特定のシリーズに属し、特定の日付間隔内にあるすべての値を検索します。

series列に1つ、seriesdate列に2つのSQLインデックスを作成することがあります。休止状態を使用すると、これは次のようになります。私の質問がある

@Table (indexes = { 
     @Index (name = "idx1", columnList = "series"), 
     @Index (name = "idx2", columnList = "series, date") 
     }) 

:検索は、私はこのように、単一のインデックスを作成した場合、私はこれらのインデックスの両方を作成、またはそれが同じであれば速いです:

@Table (indexes = { 
     @Index (name = "idx", columnList = "series, date") 
     }) 
+0

使用しているSQLのバージョンは? –

答えて

1

2つ目のインデックスは、同じ順序で(追加キーに加えて)最初のものと同じキーが含まれているため、冗長です。

一般的に、これは不必要な冗長性であるため、一般的には悪い考えです(2つのキーでインデックスを作成するだけです)。

このような2つのインデックスが役立つ場合があります。たとえば、大量のデータがある場合や、等価な環境が厳しいメモリ制約環境にある場合、最初のインデックスはメモリに収まらないことがあり、2番目のインデックスはメモリに収まらない可能性があります。しかし、それは非常にまれな状況です。そして、より良い解決策は、ハードウェアをアップグレードすることです。

1

両方の列で1つのインデックスのみが必要です。

関連する問題