2012-09-09 5 views
1

이 데이터를 MySql에서 어떻게 모델링해야합니까? ITEMGROUP을 공유 일부는 많은 항목이 있습니다내 쿼리 패턴의 모델 데이터 및 인덱스?

:

나는 다음과 같다 데이터를 가지고있다. 각 ITEM에는 0-10 또는 20 개의 이벤트 목록이 있습니다. 각 항목은 INPROGRESS 상태 또는 COMPLETED 상태 일 수 있습니다.

나는 두 가지 방법으로이 데이터를 조회하고 싶습니다 : ITEMGROUP에서

  1. 모든 항목을. 요구에 따라 질의를 받는다.
  2. 하나의 ITEM은 고유 한 식별자로 모든 이벤트와 함께 과 연결됩니다. 요구에 따라 질의를 받는다.
  3. 모든 항목이 포함되지 않습니다. 적어도 한 시간에 한 번.

한달에 2,000,000 개의 항목이 있습니다. 따라서 1 년 후에 DB에는 24,000,000 ITEMS가 있습니다.

이 데이터와 이러한 쿼리 패턴에 대한 내 데이터와 색인을 모델링하는 가장 좋은 방법은 무엇입니까? 이 데이터와 이러한 쿼리를주의해야한다면 어떤 문제가 있습니까?

답변

1

잘 모르겠습니다. 그러나 이것은 관계형 데이터베이스에 대한 간단한 스키마입니다. 이 같은?

Table: Item (Id, ...) 
Table: ItemGroup (Id, FK_Item, ...) 
Table: ItemEvent (Id, FK_Item, ...) 

SELECT Item.* 
FROM Item JOIN ItemGroup ON Item.Id = ItemGroup.FK_Item 
WHERE ItemGroup.Id = ? ... 

SELECT ItemEvent.* 
FROM Item JOIN ItemEvent ON Item.Id = ItemEvent.FK_Item 
WHERE Item.Id = ? ... 

SELECT Item.* 
FROM Item JOIN ItemEvent ON Item.Id = ItemEvent.FK_Item 
WHERE ItemEvent.state = 'INPROGRESS' ... 

Id 키 및 모든 외래 키에 인덱스 (FK_...). 이 경우 외래 키 색인 ItemEvent.FK_Item에는 ItemEvent.state 열이 포함되어야합니다.