2011-08-04 15 views
0

personId, teamId, departmentIdなどのテーブルPersonがあります。ほとんどのクエリでは、これらの列の組み合わせがどこで使用されます。SQL Server:同じ列の複数のインデックスパフォーマンス

Select * from .. where personId = 2 and departementId = 1 
Select * from .. where personId = 2 and teamId = 1 
Select * from .. where departmentId = 2 and teamId = 1 

私の質問は、私が個別にこれらの列のそれぞれのインデックスを作成する必要があり、ありますか?

+0

実際のクエリはSelect *ではありません。私はちょうど例としてこれを入れます – roncansan

答えて

2

迅速な回答は「はい」です。各列にインデックスを追加するだけです。その最適なソリューションではない可能性はほとんどありませんが、ほとんどの場合、それほど離れていないでしょうし、すでにそのテーブルに多くのインデックスを持っていなければ、おそらく害はありません。

ザ・わずかに長い答えはあなたが代表的なデータに対してテストクエリべきであるということです - (SQL Server Database Engine Tuning Advisorがあなたのためにインデックスを提案することができますが、唯一のあなたはこれらのインデックスは、他のすべてのクエリに適していることを確認するためにチェックすることができます挿入/更新を含む) - データベースへの書き込み時にこれらの索引を維持するコストと、読み取りのパフォーマンスとのバランスを取る必要があります(ストレージ/スペースの制約も含む)。

1

すべてのクエリワークロードを考慮することなく、最良の答えは得にくいです。

実際にこれらのクエリですべての列(*)を選択している場合は、カバリングインデックスを作成するのは実際的ではありませんので、答えは「はい」です。

あなたはまた、上のインデックスを作成することができます。

1)personIddepartmentId

2)personIdteamId

3)departmentIdteamId

多くのインデックスを作成することの利点ではなく、読み取り/書き込み比率に大きく依存するものはほとんどありません。また、クラスタ化インデックスはどのように定義されていますか?

クエリがSELECT *(あなたの質問に記載されているように)でない場合、選択した列リストが長すぎない場合、効果的なカバーインデックスを作成できます。

データベースチューニングアドバイザについて説明しました。それはかなり良い仕事をしますが、その勧告に目を向けなければならないことがあります。

+0

クラスタ化されたインデックスはperson.idで定義されています。 – roncansan

2

どちらの列ごとに1:SQL Serverは、インデックス交差点

を使用するか、このような何かしようとします:3つの複合インデックスを。それぞれの最初の列は「単一列の索引」としても役立ちます。

  • departmentId, teamId, personId
  • personId, departmentId, teamId
  • teamId, personId, departmentId

注:句の順序は

  • SELECT *問題ではない

    • が悪い

    また、外部キー列のインデックスを作成し、いずれかの戦略は、フィールドの使用状況の変動に3つのインデックスを作成し、原則として、

  • 0

    私はいないだろうに動作します持っていることは良い考えですが、それは単に一般的ですルール。

    "これは初心者としてどうやって行うのですか?"という答えでは、ワークロードを作成し、調整アドバイザーを使用します。それはすべての解決策の終わりではなく、誰かがもっと学ぶようになると、ウィザードを超えてしまうのですが、それはまず始めるのに適しています。誤って実行された場合、インデックスが他のクエリのパフォーマンスを破壊する可能性があるため、適切な代表サンプルを用意してください。

    +2

    "インデックスは、他のクエリのパフォーマンスを破壊する可能性があります" - 掃引文のビット。はい、インサートに影響を与えることができますが、インサートでも挿入ポイントを見つける必要があります。 –

    +0

    @Mitch Wheat:+1すべてのDMLは、行を検索するかどうか、一意性をチェックするかどうか、FKをチェックします。私は実際に "あまりにも多くのインデックス"の理論を購読していません – gbn

    +0

    @gbn - あなたは重複が多いときに問題を抱えることができます。 3つの異なるインデックスにあるフィールドを更新した場合は、ネガティブエフェクトの乗算を開始します。 – JNK

    関連する問題