2010-03-23 8 views
0

필드를 여러 테이블로 분할하면 빠른 쿼리가 생성됩니까? 다음 두 가지 시나리오를 생각해 값 1과 값 2가 항상 함께 표시되는 경우MySQL을 최적화하기 위해 필드별로 테이블을 분할 하시겠습니까?

Table1 
----------- 
int PersonID 
text Value1 
float Value2 

또는

Table1 
----------- 
int PersonID 
text Value1 

Table2 
----------- 
int PersonID 
float Value2 

, 나는 두 번째 스키마는 두 개의 SELECT 문을 필요로하기 때문에 첫 번째 시나리오는 빠른 항상 상상한다.

하지만 두 번째를 선택하는 상황이 있습니까? 기록의 수가 정말 클 것으로 예상된다면?

답변

0

이것은 Vertical partitioning이라고하며, 특정 상황에 따라 성능이 향상 될 수 있습니다. Wikipedia에서

:

수직 분할은 정상화 및 파티션 열 이상의 경우에도 이미 정규화 간다. 수직적 파티셔닝을 구현하기 위해 다른 물리적 스토리지를 사용할 수도 있습니다. 자주 사용되지 않거나 매우 넓은 열을 다른 장치에 저장하는 것은 예를 들어 수직 분할 방법입니다.

일반적인 형식의 수직 분할은 정적 데이터처럼 동적 데이터가 자주 사용되지 않는 테이블에서 동적 데이터를 (빨리 찾기) 정적 데이터에서 분리 (찾기가 느리다)하는 것입니다.

새로 생성 된 두 테이블에서 뷰를 생성하면 원래 테이블이 성능 패널티로 복원되지만 정적 데이터에 액세스 할 때 성능이 향상됩니다. 통계 분석.

때, 얼마나 오랫동안 마이 스페이스에 대한이 scalibiliy 문제를 해결하기 위해 수직 분할을 사용하는 방법, 당신은에, 다음 문서를 체크 아웃에 관심이있을 수 :

+0

cool! 이걸 뭐라 부르는지 몰랐어. 감사 – ack

0

가 고려를 귀하의 스키마 1 : 2 테이블. personID와 Value2 만 가지고 많은 데이터를 삽입한다면 (결국 value1에 대해 null을 삽입하게 될 것입니다), 차선책이 될 것입니다. 이 경우 Schema2가 더 좋을 것입니다. (각 학년과 관련된 부서가있는 위 예제에서 학교 학술 부서/학생을 생각해보십시오. 어느 것이 더 낫습니까? Schema1? Schema 2)

value1과 value2가 함께 표시되면 (예 : SSN, FirstName, 성) Schema1 (하나의 테이블)이 이상적입니다

일반적인 경험 법칙은 읽기 전용/대부분 읽기 전용 테이블과 스키마 2 (2 테이블)를 쓰기 전용/주로 쓰기 (또는 쓰기 횟수가 매우 큰 값으로 읽음) 테이블

0

텍스트가 정기적으로 매우 큰 문서 였고 일부 시간에도 다른 두 문서와 액세스 할 필요가없는 경우 나는 그것들을 구분할 것이다. 매우 적은 수의 행에 대해서는 많은 차이를 볼 수 없습니다. 수백만 행을 시도하면 테이블을 스캔하는 데 필요한 작업량이 크게 달라집니다. 데이터 정규화에 대한 규칙 중 어느 것도 당신을 분할하지 못하게합니다. http://www.bkent.net/Doc/simple5.htm은 훌륭한 참고 자료입니다. 많은 질문과 마찬가지로 대답은 세부 사항에 달려 있습니다.이러한 모든 질문에 DBMS가 할 수있는 간단한 대답이 포함되어 있다면 그것에 대해 생각할 필요가 없습니다.

관련 문제