SQL Fiddle에 대한 다음 스키마를 고려하십시오. 보시다시피 다형성 연관을 모델링하기위한 수퍼 테이블 스키마를 따릅니다. 실제 구현에서는 foo, bar 및 baz 테이블이 서로 매우 다르다는 점을 기억하십시오.여러 가능한 테이블에 가입
, 내 첫 번째 아이디어는 여러 LEFT OUTER 조인을 사용하는 것이었다 내가 직면하고있어 문제는 내가 해당 대상에 해당 소유자에 대한 모든 활동을 검색 할 필요가있다: 는이 쿼리를
SELECT *
FROM activities
LEFT OUTER JOIN foo ON activities.target_id = foo.activitable_id
LEFT OUTER JOIN bar ON activities.target_id = bar.activitable_id
LEFT OUTER JOIN baz ON activities.target_id = baz.activitable_id
WHERE activities.owner_id = 1
괜찮음 나는 각 테이블마다 3 개의 테이블을 하나의 행으로 결합한다고 생각하지만 스키마가 각 테이블의 10k 행과 8 개의 조인으로 커지면 성능에 큰 영향을 미칩니다.
제 질문은 더 빠른 쿼리로 원하는 것을 얻을 수있는 방법이 있습니까?
외래 키에 대한 인덱스 추가 – Donal
쿼리가 괜찮습니까? 나는 foo/bar/baz 레코드를 곱하는 것 같아요. 당신은 노동 조합을 사용할 수 있다고 생각합니다. – Arvo
전송할 데이터가 적기 때문에 *를 선택하는 대신 필요한 필드 만 선택하면 항상 빠릅니다. –