- インデックスはpostgresqlのand節で使用できますか?
- 私は本当に混乱しているのですか?何かを提案してください。
- n:nの関係を主キーと外部キーを使用してマッピングテーブル1:nにマップするのが理想的です。
ご協力いただきありがとうございます。postgresqlのand節でインデックスを使用できますか?
ご協力いただきありがとうございます。postgresqlのand節でインデックスを使用できますか?
もちろん、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
のインデックスも使用できます。それぞれの条件では異なるインデックスを使用できます。これは、ビットマップインデックススキャンで実行され、両方の条件では、ビットマップとと組み合わせられます。 これは、通常、複数列の索引よりパフォーマンスが劣りますが、大規模な分析問合せのための手段になります。
および3 が多対多(M とも呼ばれる:N関係)関係は常にマッピングテーブルを用いてモデル化されるであろう。マッピングテーブルの主キーは、通常、両方のテーブルの主キーの組み合わせです(Wikipedia articleを参照)。
1対多の関係(また1と呼ばれる:N関係)常に「1」側に「多くの」側からの外部キーを用いて実装されています。