2012-07-02 2 views
1

데이터베이스 테이블의 항목 목록과 각 하위 항목과 함께 관련 하위 항목의 작은 목록 (최대 10 개 항목)을 인쇄하고 싶습니다.목록에서 관련 데이터 가져 오기

예를 들어, 나는이 2 개 개의 테이블이 :

ITEMS 

id: integer 
name: string 


SUBITEMS 

id: integer 
name: string 
item_id: integer 

그래서, 항목이 많은 하위 항목을 가질 수 있습니다.

나는 이런 식으로 뭔가를 인쇄하고 싶습니다 : 이

Item 1 
this item has: subitem 1, subitem 2, subitem 3 

Item 2 
this item has: subitem 4, subitem 5, subitem 6 

Item 3 
this item has: subitem 2, subitem 4, subitem 7 

이 어떻게 마음에 성능이를 얻을 수

? 앞에서 말했듯이 각 항목에는 여러 하위 항목이있을 수 있지만 최대 10 개까지 표시됩니다.

조인으로 select를하면 페이지 매김이있을 때 데이터베이스에 너무 많은 스트레스를 줄 수 있습니다. 예를 들어, 페이지 당 25 개의 항목 및 쿼리하는 100 명의 사용자. 그래서, 저는 이것이 좋은 해결책이 아닐 것이라고 생각합니다.

ITEM 테이블에 새 필드를 추가하고 이름이 subitems_summary (텍스트 유형) 인 항목을 추가 할 때마다 항목을 항목에 할당 할 때마다 두 항목을 조인하도록 선택합니다. 테이블을 만들고 거기에 결과를 저장하므로 나중에 해당 필드의 데이터 형식을 지정할 수 있습니다. 예를 들어 위의 목록에서 Item 3의 subitems_summary 필드는 "subitem 2, subitem 4, subitem 7"이됩니다.

당신은 어떻게 생각하십니까?

+0

은 "더러운 해결 방법은"선택의 성능을 위해 수행뿐 아니라, 업데이트를 삽입하고, 각 하위 항목에 대한 삭제 생각해보십시오. –

+0

'select *'를 사용하여 결과 세트를 반복하고 null이 아닌 값을 인쇄하십시오. – alfasin

답변

0

나는 더 많은 답변을 얻지 못하므로 내 의견을 게시 할 예정입니다.

Oleksi가 말했듯이 DBMS는 가입 쿼리를 실행하기에 충분합니다. 이는 방문자 수가 적 으면 사실 일 수 있습니다. 그러나 규모 조정을 주시하면서 복잡한 일을하는 데 최적화 된 방법은 아닙니다.

내가 좋아할만한 흥미로운 기술이 있다고 생각하지만 처음부터 쿼리를 최적화하는쪽으로 나아갑니다. 제 생각에는 조인을 의도적으로 사용하는 것은 좋지 않습니다. 전문 사이트에서는 그 이유만으로 필드를 복제하는 것이 좋습니다. 내가 요구 한 것을 달성하기 어쨌든

는, 내가 이런 짓을 했을까 : https://stackoverflow.com/a/11301759/267705

0

항목 테이블이 정말로 방대하지 않으면 조인은 충분히 빠르게이 작업을 수행합니다. 가장 깨끗한 솔루션이므로 먼저 구현해야합니다. 그런 다음 성능을 측정하고 속도가 너무 느린 지 확인할 수 있습니다. 나는 그것이 충분히 빠를 것이라고 당신이 알게 될 것이라고 생각합니다. 그렇지 않은 경우 사용자가 작성한 쿼리에서 많이 사용되는 열에 인덱스를 추가 할 수도 있습니다. 이것은 DBMS에게보다 강력한 최적화 옵션을 제공 할 것입니다.

DBMS는 일반적으로 이와 같은 쿼리를 최적화하는 데 매우 뛰어나므로 사용자 지정 최적화를 시작하기 전에 쿼리를 가장 빨리 수행 할 수 있어야합니다.

+0

글쎄, 서브 쿼리를 사용하지 않는다면 내가 필요한 것은 얻을 수 없다고 생각합니다. 그리고 이것은 훨씬 더 까다 롭습니다. –

관련 문제