2012-12-28 4 views
0

배경 :MySQL의 이노 디비 : 빠른 검색을 위해 단일 테이블에 3 개 테이블을 결합 ... 조건부 조인

내가 세 번에 엔티티 검색 할 수 있도록하는 검색 기능을 개발하고 :에 의해 수업, 학생 단체 및 이벤트 이름.

MySQL 5.6과 Innodb는 상대적으로 작은 서버에서 활용 될 것입니다.

테이블 :

검색

entity_id (tiny_int) 
entity_type (tiny_int) 
full_name (varchar(255)) 

Index (Primary) -> entity_id, entity_type 
Index (FULL TEXT INDEX) -> full_name 

클래스 (ENTITY_TYPE = 1)

class_id 
ALL OTHER COLUMNS... 

이벤트 (ENTITY_TYPE = 2)

event_id 
ALL OTHER COLUMNS 

여러 조직 (ENTITY_TYPE = 3)

org_id 
ALL OTHER COLUMNS 

질문 :

이 인덱스에 적합한 entity_id, entity_type 기본 키의 사용을 통해 하나 개의 검색 테이블에 3 개 겉으로는 비슷하지만 다른 데이터 세트 (클래스, 이벤트, 조직)의 이름은?

Class, Events, Orgs 테이블이있는 검색 테이블에서 조인을 수행하려면 어떻게해야합니까? entity_type을 사용하여 수행 할 수있는 조건이 있습니까?

도움이나 도움을 주시면 대단히 감사하겠습니다.

답변

1

이것은 세 가지 테이블 유형을 연결하는 합리적인 접근법처럼 보입니다. 그것은 'account_type : user, admin, other'와 각각의 설정에 대한 링크로 사용자가 자주 보는 것과 유사합니다.

주 테이블과 세 개의 하위 테이블 간의 조인은 열의 유사 정도에 따라 달라집니다. 이들이 비슷하다면 동일한 쿼리에서 세 개의 조인을 수행하고 entity_type을 on 절의 일부로 사용할 수 있습니다. 이들이 서로 다르다면 쿼리를 세 가지 별개의 조인으로 분리하여 더 잘 수행 할 수 있습니다. 이 두 가지를 결합 할 수는 있지만 가치가있을 수도 그렇지 않을 수도 있습니다.

+0

"ON"문은 'ON a.entity_id = b.entity_id AND a.entity_type = 1'과 같은 여러 조건을 가질 수 있습니까? – ProfileTwist

+0

예. 전혀. – ethrbunny