2013-03-14 7 views
1

내가 25,000 정도 행이있는 테이블을 말해봐.하나의 거대한 MySQL 테이블을 사용합니까?</p> <pre><code>item_id, item_name, item_value, etc... </code></pre> <p>내 응용 프로그램은 사용자가 어디서나 2-300 항목에서 각각의 동적 목록을 생성 할 수 있습니다 :

이러한 관계를 모두 열 dynamic_list_id, item_id 인 거대한 테이블에 저장해야합니까? 각 동적 목록은이 테이블에서 2 ~ 3,000 개의 행을 갖게되고 테이블의 크기는 수백만 또는 수십억에 달할 것입니다.

이 테이블은 매우 자주 쿼리되어 매초 이러한 동적 목록 중 몇 개를 검색합니다. 거대한 테이블이 가장 좋은 방법입니까? 사용자가 이름을 지정한 동적 테이블로 분할하는 것이 합리적입니까?

엄청난 양의 데이터를 데이터베이스로 준비 할 때 정말 실망 스럽습니다. 따라서 어떤 통찰력이라도 크게 감사 할 것입니다.

+0

데이터 모델이 정규화를 지원합니까? 테이블에 적절한 인덱스가 있고 기본 하드웨어가 실제로 우수한 I/O 처리량을 제공하는 경우 대용량 테이블이 본질적으로 더 나쁘지는 않습니다. 색인을 생성하지 않으면 큰 표를 잊어 버리십시오. –

+0

이 질문은 너무 막연합니다. 25K 개의 고유 항목이 무엇을 의미합니까? 25K 개의 다른 행이 표에 있습니까? 좀 더 잘 이해할 수 있도록 실물 모형의 "데이터"를 제공해 주시겠습니까? – OldProgrammer

답변

2

예, 저는 제안 된 디자인으로 "동적 인 열이있는 거대한 테이블 dynamic_list_id, item_id"라고 권장합니다.

색인 선택과 스핀들 수 및 읽기/쓰기 암 수를 늘리고 SSD 캐싱을 늘려 성능을 쉽게 해결할 수 있습니다.

그리고 사물의 거대한 계획에서이 데이터베이스는 특별히 크게 보이지 않습니다. 요즘에는 수십 또는 수백 TB의 큰 데이터베이스가 필요합니다.

3

그것은 관계형 데이터베이스로, 그런 종류의 작업을 위해 설계된 것입니다. 단지 몇 백만 행은 "거인"으로 간주되지 않습니다. 인덱싱에 대해 매우 신중하게 생각하십시오. 삽입/업데이트 성능, 저장 공간 및 쿼리 성능의 균형을 맞추어야합니다.

1

큰 테이블을 사용하면 행 레벨 잠금을 위해 엔진을 InnoDB로 설정해야합니다.
색인을 현명하게 사용하고 있는지 확인하십시오.
쿼리가 드래그하기 시작하면 Innodb_buffer_pool의 크기를 늘려 보정하십시오.