0

クエリの結果をインデックスに制限するために使用されるフィールドを作成することをいくつかの場所で読みました。しかし、異なるクエリが異なる列の組み合わせを使用するアプリケーションがあるとします。

たとえば、次の 3 つのクエリがあるとします。

  1. Select * from table1 where field1 = 'A';
  2. Select * from table1 where field1 = 'A' and field2 = 'B';
  3. Select * from table1 where field1 = 'A' and field3 = 'C';

field1 に 1 つ、field2 に 1 つ、field3 に 1 つのインデックスを作成した方がよいでしょうか? または、field1 のインデックス、field1 と field2 の組み合わせのインデックス、field1 と field3 の組み合わせのインデックスを作成した方がよいでしょうか。

4

1 に答える 1

3

インデックス onfield1は、3 つのクエリすべてに役立ちます。(field1, field2)またはのいずれかの複合インデックスは(field1, field3)、最初のクエリと 2 番目または 3 番目のいずれかのクエリに役立ちます。また、一意でないインデックスをfield1冗長にレンダリングします (複合インデックスは最初のクエリで使用できるため)。

特定のインデックスについて、インデックスを追加するコストと、インデックスを使用するメリットを比較検討する必要があります。インデックスはスペースを使用します。インデックスは、行が追加、削除、または更新されるときに (一般に) 処理時間を使用します。インデックスを頻繁に使用し、使用時に十分な高速化が得られる場合、メリットはコストを上回ります。インデックスをめったに使用しない場合、元が取れない可能性があります。テーブルが動的 (行が頻繁に変更される) である場合、インデックスの更新コストは、テーブルが比較的静的 (めったに変更されない) である場合よりも大きくなります。

より多くのインデックスがある場合、オプティマイザーはより多くの作業を行う必要がありますが (どのインデックスが関連しているかをチェックします)、それがインデックスを作成するか作成しないかの決定要因になることはめったにありません。

一般に、テーブルに関連するすべての一意のインデックスがあることを確認してください。

複合インデックスを追加すると (測定したため)、十分な速度が得られ、十分な頻度で使用され、全体的な利益が得られると確信できます。

于 2013-06-07T05:23:44.580 に答える