2013-06-07 1 views
0

마이그레이션에서 다음 행이 있으면 암시 적 인덱스를 postgresql이 추가합니까? 외래 키에 대한 인덱스를 명시 적으로 추가해야합니까? 모델에는 has_many 및 belongs_to가 적절하게 포함됩니다. fine manual에서레일스 Postgres에 외래 키 인덱스를 추가해야합니까?

t.integer :club_id, 
      :null => false, 
      :options => "CONSTRAINT fk_transactions_club REFERENCES clubs(id)" 
+0

'has_many' /'belongs_to'를 사용할 때 FKeys가 자동으로 선언되지 않습니까? –

+1

@Denis : 아니요. Rails는 데이터베이스 FK와 같은 멋진 것을 믿지 않습니다. –

+0

@muistooshort : ouch ... 이런 것들이 루비를 배웠을 때 나는 그 일에 시간을 낭비하지 않기로 결정해서 기쁘다. –

답변

0

:

5.3.5. 외래 키
[...] 참조 된 테이블에서 행의 DELETE 또는 기존의 값과 일치하는 행에 대한 참조 테이블의 스캔이 필요합니다 참조 된 컬럼의 UPDATE 이후
, 그것은 종종 좋은 생각입니다 참조하는 열을 색인화합니다. 이것은 항상 필요하지는 않으며 인덱스하는 방법에 대해 여러 가지 선택 사항이 있으므로 외래 키 제약 조건 선언은 참조하는 열에 인덱스를 자동으로 생성하지 않습니다.

FK가 PK를 참조하고 있으므로 업데이트에 대해 걱정할 필요가 없을 것입니다. 참조하는 테이블 (club_id이있는 테이블)이 커야하고 club 행을 자주 삭제하려는 경우 club_id에서 일종의 인덱스는 club 행을 더 빨리 삭제해야합니다. club_id에 색인이없는 경우 club 행을 삭제하려고하면 club_id이 포함 된 표에서 표 스캔이 필요하며 테이블 스캔은 친구가 아닙니다.

대답은 일 수 있습니다. 따라서 club이 사용되는 방법에 따라 다릅니다..

+0

부모 레코드가 거의 지워지지 않을뿐 아니라 시간이 문제되지 않습니다. (: club_id = session [: club_id])를 사용하고 새로운 하위 레코드를 삽입하는 자식 테이블에서 많은 선택에 대해 더 우려하고 있습니다. – markhorrocks

+0

'club_id'에 대해 많은 질문을한다면, 인덱스는 어떤 FK 문제와도 관계없이 좋은 아이디어입니다. 네가 FK면에만 관심이 있다고 생각 했어. –