2016-06-15 4 views
1
  1. インデックスはpostgresqlのand節で使用できますか?
  2. 私は本当に混乱しているのですか?何かを提案してください。
  3. n:nの関係を主キーと外部キーを使用してマッピングテーブル1:nにマップするのが理想的です。

ご協力いただきありがとうございます。postgresqlのand節でインデックスを使用できますか?

答えて

4
  1. もちろん、ANDでインデックスを使用できます。 2つの例:

    test=> EXPLAIN (COSTS OFF) SELECT attname FROM pg_attribute 
         WHERE attrelid = 'pg_class'::regclass AND attnum = 1; 
              QUERY PLAN 
    ------------------------------------------------------------------ 
    Index Scan using pg_attribute_relid_attnum_index on pg_attribute 
        Index Cond: ((attrelid = '1259'::oid) AND (attnum = 1)) 
    (2 rows) 
    

    これは、両方の条件に同時に複数のインデックスを使用します。ここ

    test=> EXPLAIN (COSTS OFF) SELECT attname FROM pg_attribute 
         WHERE attrelid = 'pg_class'::regclass AND attlen = 64; 
             QUERY PLAN 
    ------------------------------------------------------------ 
    Bitmap Heap Scan on pg_attribute 
        Recheck Cond: (attrelid = '1259'::oid) 
        Filter: (attlen = 64) 
        -> Bitmap Index Scan on pg_attribute_relid_attnum_index 
         Index Cond: (attrelid = '1259'::oid) 
    (5 rows) 
    

    それが索引スキャンのフィルタとして用いられる第2条件–ためのインデックスがないながらインデックスは、最初の条件のために使用することができます。

    PostgreSQLでは、ANDのインデックスも使用できます。それぞれの条件では異なるインデックスを使用できます。これは、ビットマップインデックススキャンで実行され、両方の条件では、ビットマップとと組み合わせられます。 これは、通常、複数列の索引よりパフォーマンスが劣りますが、大規模な分析問合せのための手段になります。

  2. および3 が多対多(M とも呼ばれる:N関係関係は常にマッピングテーブルを用いてモデル化されるであろう。マッピングテーブルの主キーは、通常、両方のテーブルの主キーの組み合わせです(Wikipedia articleを参照)。

    1対多の関係(また1と呼ばれる:N関係)常に「1」側に「多くの」側からの外部キーを用いて実装されています。

関連する問題