2011-09-11 21 views
3

プライマリキーとして次の列を持つテーブルがある場合:Username, Title, Start Date、データベースは自動的にインデックスを作成します。インデックスに関する質問

  1. ユーザー名で選択してクエリの開始日を指定すると.....上記のインデックスが使用されますか、または追加のインデックスを指定する必要がありますか?
  2. タイトルと開始日が一意に識別されますが、私もプライマリキーにユーザー名を追加すると、スーパーキーになりますか?

答えて

4

1)私は、ユーザー名で選択して、クエリの日付を開始したい場合は.....それは上のインデックスを使用するか、または私は追加のインデックスを指定する必要がありますか?

あなたは、このような複雑な条件、たとえば、持っている:

username = 'blah-blah-blah' AND startdate > '01.01.2010' 

あなたのテーブルのPKは以下のように定義されている場合:

PRIMARY KEY (Username, Title, StartDate) 

次にインデックスは、ユーザー名フィールドを含む最初の部分に使用されます。開始時の値は自然な順序で評価されます。

あなたはインデックスは複雑な条件の両方の部分に使用したい場合は、どちらかのSTARTDATEに追加のインデックスを作成したり、PKのフィールドの順序を変更します。

PRIMARY KEY (Username, StartDate, Title) 

2)タイトルの場合や特定の日付を開始一意ですが、私はまた、ユーザ名 をプライマリキーに追加します。それはスーパーキーになりますか?

追加のフィールドで一意のインデックスを乱用しないことをお勧めします。あなたのケースでは、タイトルと開始日にPKを作成し、(必要な場合)ユーザー名フィールドに別のインデックスを作成します。

+0

タイトルと開始日にプライマリキーを作成してから、ユーザー名のみにセパレートインデックスを作成すると、username、startdate、titleの3つの列すべてでクエリを実行するときに正しいインデックスが使用されますか? – firebird

+0

この場合、FBは2つのインデックスを使用します。さらに、別のインデックスを使用すると、オプティマイザをクエリする余分な選択肢が得られます。 –