2011-02-13 5 views
0

6 백만 레코드가있는 약 17 개의 정규화 된 열이있는 InnoDB 테이블이 있습니다. 테이블의 크기는 ~ 15GB입니다. 테이블에서 쿼리가 너무 오래 걸리기 시작하고 때로는 시간 초과/충돌이 발생합니다. 나는 테이블을 분할하는 것을 생각하고있다. 그러나 어느 쪽이 더 좋을 지 혼란스러워한다. 동일한/다른 DB의 여러 테이블로 열을 분할합니까? 또는 테이블의 행을 다른 DB로 분할합니까? 그렇다면 DB의 어느 행이 어디에 있는지 어떻게 알 수 있습니까?아주 큰 테이블 분할 - 조언 제발

누군가가 Map/Reduce에 대해 언급했지만 더 혼란 스러웠습니다. 이것에 대한 도움은 매우 감사하겠습니다.

감사합니다.

+1

대기열 및 테이블 스키마의 예가 필요합니다. – zerkms

답변

3

쿼리를 빠르게 만들기 위해 테이블을 분할하는 것은 내가 취할 단계가 아닙니다. 먼저 쿼리를 변경하거나 인덱스를 추가하여 쿼리를 더 빠르게 만들 수 없는지 확인하려고합니다. 귀하의 질문에 & 쿼리 테이블을 추가하는 것이 좋습니다, 그래서 우리는 더 나은 답변을 제공 할 수 있습니다.

& 개의 쿼리를 이미 최적화 한 경우에도 partitioning을 시도 할 수 있습니다. 예를 들어 다른 하드 디스크와 같이 물리적으로 테이블을 분할하지만 논리적으로 하나의 테이블로 유지됩니다. 즉, 쿼리를 변경하지 않고도 더 빨리 쿼리를 수행 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 인덱스와 쿼리는 이미 최적화되어 있습니다. 데이터도 표준화되었지만 데이터가 너무 많습니다. 제안한대로 파티션을 조사합니다. 잘하면 도움이 될 것입니다. –

+0

@ 수은 터미널. 그다지 나쁘다면 테이블을 비정규 화하거나 테이블을 설정하여 쿼리가 더 빨라지고 정규화 된 테이블의 트리거를 통해 데이터로 업데이트되도록 할 수 있습니다. [데이터웨어 하우징] (http://en.wikipedia.org/wiki/Data_warehouse#Normalized_versus_dimensional_approach_for_storage_of_data)을 참조하십시오. 물론, 문제가 발생하면 데이터의 동기화가 끊어 질 위험이 있습니다. –