2011-12-08 3 views
0

세 개의 테이블에 식별자가 아닌 공통 필드가 있습니다. 예 :SQL 성능 - Union 및 Subselects

dairy_warehouse 
    -dairyId (primary key) 
    -expiration_date 
    -other dairy related fields 

frozen_food_warehouse 
    -frozenFoodId (primary key) 
    -expiration_date 
    -other frozen food related fields (not same as dairy related fields) 

dry_goods_warehouse 
    -dryGoodsId (primary key) 
    -expiration_date 
    -other dry goods related fields (not same as frozen food or dairy fields) 

다음 달에 만료되는 모든 항목을 나열하는 보고서를 작성하려고합니다. 세 테이블 사이에 외래 키 관계가 없기 때문에 조인이 작동한다고 생각하지 않습니다. 나는 현재 expiration_date에 인덱스를 추가하고 union과 3 개의 sub-select를 사용하는쪽으로 기울어 져 있지만 이것은 끔찍한 성능이 될 것이라고 우려하고 있습니다. 더 나은 해결책이 있습니까?

답변

2

유니온을 사용하더라도 각 쿼리가 인덱스를 치는 한 성능에 영향을 미치지 않습니다. expiration_date에 색인을 추가하라는 제안이 올바른 것입니다.

테이블간에 레코드가 하나도 연관되어 있지 않기 때문에 외래 키가 없습니다.

0

외부 키는 참조 무결성을위한 것입니다. "자식"테이블이 "마스터"테이블에 존재하지 않는 값을 지정할 수 없도록하려면 *. 외래 키는 그 자체로 SELECT 쿼리 성능을 향상시키지 않습니다. "expiration_date"에 인덱스를 추가하면 성능이 뛰어난 쿼리가 생성됩니다.

  • RI와 외래 키를 사용하는 시나리오는 많이 있지만 가장 일반적인 시나리오입니다.