sql >> データベース >  >> RDS >> PostgreSQL

HABTM結合テーブルに2つのインデックスが必要ですか?

    閉じる-次のものが必要になる可能性があります:

    add_index :person_products, [:person_id, :product_id], :unique => true
    add_index :person_products, :product_id
    

    :unique => true 厳密には必須ではなく、製品に複数回関連付けられている人がいることが理にかなっているかどうかによって異なります。よくわからない場合は、おそらく :uniqueが必要 フラグ。

    インデックス構造の理由は、最近のすべてのデータベースは、クエリで指定された順序に関係なく、最初のインデックスを使用してperson_idとproduct_idの両方でクエリを実行できるためです。 。例:

    SELECT foo FROM bar WHERE person_id = 1 AND product_id = 2
    SELECT foo FROM bar WHERE product_id = 2 AND person_id = 1
    

    は同じものとして扱われ、データベースは最初のインデックスを使用するのに十分スマートです。

    同様に、person_idのみを使用したクエリ 最初のインデックスを使用して実行することもできます。複数列のBツリーインデックスは、元の宣言の左側から指定されている場合よりも少ない列を使用できます。

    product_idのみを使用するクエリの場合 、これは最初のインデックスに対して実行できません(そのインデックスは左端のperson_idで定義されているため)。したがって、そのフィールドのみでルックアップを有効にするには、個別のインデックスが必要です。

    複数列のbツリーインデックスプロパティは、列数が多いインデックスにも拡張されます。 (person_id, product_id, favorite_color, shirt_size)にインデックスがある場合 、そのインデックスを使用して、person_idを使用してクエリを実行できます 、(person_id, product_id) 、など、順序が定義と一致する限り。



    1. データベースセキュリティのためのMariaDB監査プラグインの使用

    2. この1の順序は何ですか?

    3. PHP/MySqlのクエリおよび/または高度な検索

    4. Doctrine 2 DQLでnow()を使用するにはどうすればよいですか?