다음은 미친 짓과 욕설입니다 ...
모든 데이터를 하나의 테이블에두면 (파티셔닝 없음) 키를 사용하여 O (log n) 검색 시간이 발생합니다. 세계에서 최악의 인덱스 인 이진 트리를 보자. 각 트리 노드에는 정확히 하나의 키가 있습니다. 268,435,455 (2 ^ 28-1) 트리 노드가있는 완벽하게 균형 잡힌 이진 트리의 높이는 28입니다.이 이진 트리를 16 개의 개별 트리로 분할하면 16,777,215 (2 ^ 24-1)의 이진 트리가 각각 16 개가됩니다. 검색 경로는 14.2857 %의 높이 인 4 개의 노드로 줄어 듭니다. 검색 시간이 마이크로 초인 경우 검색 시간이 14.2857 % 감소하면 무시할 수 없습니다.
실제 환경에서 BTREE 인덱스에는 여러 키가있는 트리 노드가 있습니다. 각 BTREE 검색은 페이지 내에서 이진 검색을 수행하여 다른 페이지에 적절한 검색을 수행합니다. 예를 들어, 각 BTREE 페이지에 1024 개의 키가 포함 된 경우 3 또는 4의 트리 높이가 일반적으로 짧은 트리 높이입니다.
테이블의 참여가 이미 작은 BTREE의 높이를 줄이지는 않습니다. 260 백만 행의 분할로 인해 동일한 높이의 여러 BTREE를 가질 가능성이 높습니다. 키를 검색하면 매번 모든 루트 BTREE 페이지를 통과 할 수 있습니다. 하나만 필요한 검색 범위의 경로를 충족시킵니다.
이제 이것을 확장하십시오. 모든 파티션이 같은 머신에 존재합니다. 각 파티션에 별도의 디스크가없는 경우 파티션 검색 성능을 벗어나는 자동 병목 현상으로 디스크 I / O 및 스핀들 회전이 발생합니다.
이 경우 데이터베이스별로 분류하면 id가 유일한 검색 키인 경우 아무 것도 구매하지 않습니다.
데이터 분할은 동일한 클래스에 논리적이고 응집력이있는 데이터를 그룹화하는 역할을합니다. 데이터가 올바르게 그룹화되어 있으면 각 파티션 검색 성능을 고려해야합니다. 논리 파티셔닝을 달성하면 검색 시간에 집중하십시오. ID로만 데이터를 분리하는 경우 읽기 또는 쓰기를 위해 많은 데이터 행에 액세스하지 못할 수 있습니다. 이제, 그 주요 고려 사항이어야한다 : 모든 ID가 가장 자주하는 액세스 및 파티션 찾습니다 . 자주 액세스하지 않는 모든 ID는 하나의 큰 아카이브 테이블에 있어야하며,이 인덱스는 '블루 문에서 한 번'쿼리에 대한 인덱스 조회로 여전히 액세스 할 수 있습니다.
전체적으로 미치는 영향은 두 개 이상의 파티션을 가져야합니다. 하나는 자주 액세스하는 ID 용이고 다른 하나는 나머지 ID 용입니다. 자주 액세스하는 ID가 상당히 큰 경우 선택적으로 분할 할 수 있습니다.