2016-06-15 4 views
1
  1. 인덱스는 postgresql의 and 절에 사용할 수 있습니까?
  2. 테이블 관계에서 하나 또는 여러 맵핑을해야 할 때 혼란 스럽습니다. 아무것도 또는 기사를 제안하십시오.
  3. n : n 관계가 기본 키와 외래 키가있는 매핑 테이블 1 : n과 매핑되어야하는 이상적인 방법이 있습니다. 귀하의 도움에 감사드립니다.

postgresql에서 and 절에 인덱스를 사용할 수 있습니까?

답변

4
  1. 물론 인덱스는 AND과 함께 사용할 수 있습니다. 두 가지 예 :

    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) 
    

    이렇게하면 두 조건에 한 번에 여러 열 인덱스가 사용됩니다. 이 인덱스 스캔 필터로서 사용되는 제 2 상태 – 대한 인덱스가없는 상태

    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) 
    

    여기서 인덱스는 상기 첫 번째 조건에 사용될 수있다.

    PostgreSQL에서는 AND에 인덱스를 사용할 수 있습니다. 각 조건은 다른 인덱스를 사용할 수 있습니다. 이는 비트 맵 인덱스 스캔과 함께 사용되며 두 조건 모두에서 BitmapAnd 및과 결합됩니다. 일반적으로 여러 열 인덱스보다 성능이 좋지 않지만 대규모 분석 쿼리를 수행하는 방법이 될 수 있습니다.

  2. , 3 은 다 대다 (m 라고도 : N 관계) 관계는 항상 매핑 테이블로 모델링됩니다. 매핑 테이블의 기본 키는 대개 두 테이블의 기본 키 조합입니다 (Wikipedia article 참조).

    일대 관계 (도 1 전화 : N 관계는)는 항상 '하나'측에 '많은'측면에서 외래 키와 함께 구현된다.

관련 문제