2017-05-18 10 views
1

こんにちは、私は、postgreSQLで2つの列のユニークなインデックスを作成する場合は、両方の列の通常のインデックスは同じユニークなインデックスで動作するか、私は1つのユニークなインデックスと2つのインデックスコードに示されているように?私はtalent_id、job_idのユニークなインデックスを作成したい、両方の列は別々にインデックスを付ける必要があります。私は多くのリソースを読んだが、適切な答えを得ていない。通常のインデックス作成は、ユニークなインデックスを作成することによっても機能しますか?

add_index :talent_actions, [:talent_id, :job_id], unique: true 

上記のコードでもインデックス作成が行われますか、または別途インデックス作成を追加する必要がありますか?

add_index :talent_actions, :talent_id 
add_index :talent_actions, :job_id 

ありがとうございます。

答えて

1

インデックスはデータベース内のオブジェクトであり、クエリプランナが適切であると判断した場合は、データをより高速に検索するために使用できます。あなたの質問に対する簡単な答えは「いいえ」です.1つのインデックスを作成しても、3つの異なるインデックスを作成するのと同じ構造がデータベースに作成されるわけではありません。

私はすべての3つのインデックスが必要です、または一意索引がすでにすべてのクエリを最適化します:

私は、あなたが実際に知ってほしいことは、このだと思いますか?

これは、データベースの最適化と同様に、実行するクエリと所有するデータによって異なります。

は、ここではいくつかの考慮事項です:

  • マルチカラムインデックス事項の列の順序。姓とソート順でソートされた人物のインデックスがある場合、それを使って同じ姓の人を検索することができます。しかし、あなたはおそらく彼らが最初の名前を知っているときに誰かを検索するためにそれを使用することはできません。
  • データ配信の問題。あなたのリストの誰もが "Smith"と "Jones"という名字を持っていれば、名字の最初のインデックスを使ってかなり簡単に検索することができます。
  • 索引サイズの問題。索引の数が少ないほど、一度にメモリに収まるので、使用するのが速くなります。

は多くの場合、クエリプランナでし使用複数のインデックスがあり、そしてその仕事はあなたが書いたクエリに対して上記の要因のコストを推定することです。

通常は、複数の索引を作成することには役立ちませんが、ディスク領域を使い果たしてしまい、場合によっては問合せプランナが悪い計画を選択することがあります。だから、最良の方法は、常に実際のデータをデータベースに取り込み、いくつかの実際のクエリのクエリプランを調べることです。

+0

3つのインデックスをすべて必要とするのか、ユニークインデックスですべてのクエリを最適化するのでしょうか? >>はい正確にこれは私が尋ねてきたものです。あなたの素早い応答のおかげであります。 –

+0

私はすべての外部キーにインデックスを使用する予定です。クエリや検索、ソートに直接的および間接的に使用されるためです。 1)すべての外部キーのインデックスを作成します。2)必要な場合は、固有のインデックスも作成します。私が間違っているなら、私を修正してください。ありがとう。 –

+0

@ ShivRajそれは良い一般的な計画のように聞こえる、はい。 – IMSoP

関連する問題