>  기사  >  데이터 베이스  >  mysql 다중 필드 파티셔닝

mysql 다중 필드 파티셔닝

(*-*)浩
(*-*)浩원래의
2019-05-10 13:32:326966검색

파티셔닝은 특정 규칙을 기반으로 합니다. 데이터베이스는 테이블을 더 작고 관리하기 쉬운 여러 부분으로 분해합니다. 데이터베이스 애플리케이션에 액세스하는 경우 논리적으로 하나의 테이블 또는 하나의 인덱스만 있지만 실제로 이 테이블은 N개의 물리적 파티션 개체로 구성될 수 있습니다. 각 파티션은 독립적인 개체이며 독립적으로 처리될 수 있으며 일부로 사용될 수 있습니다. 처리를 위한 테이블입니다. 파티셔닝은 애플리케이션에 완전히 투명하며 애플리케이션의 비즈니스 로직에 영향을 주지 않습니다.

추천 과정: MySQL 튜토리얼.

mysql 다중 필드 파티셔닝

분할은 매우 큰 테이블을 관리하는 데 도움이 됩니다. 분할 및 정복 논리를 채택하면 파티션 키가 특정 간격 값(또는 범위 값)에 따라 사용됩니다. 값 목록 또는 해시 함수 값을 사용하여 데이터 집계를 수행하고 규칙에 따라 데이터를 여러 파티션에 배포하고 하나의 큰 개체를 작은 개체로 만듭니다.

MySQL 파티셔닝은 데이터나 인덱스를 파티셔닝할 수 있습니다.

참고: 어떤 종류의 분할이든 관계없이 분할된 테이블에 기본 키/고유 키가 없거나 분할된 테이블의 기본 키/고유 키에 파티션 키가 포함되어야 합니다. 즉, 다른 필드를 사용할 수 없습니다. 파티셔닝을 위한 기본 키/고유 키 필드가 아닙니다.

MySQL 파티션의 제한 사항은 주로 다음 네 가지 측면을 포함합니다.

단일 디스크 또는 파일 시스템 파티션에 비해 더 많은 데이터를 저장할 수 있습니다

쿼리를 최적화합니다. where 절에 파티션 조건이 포함되면 필요한 하나 이상의 파티션만 스캔하여 쿼리 효율성을 향상시킬 수 있으며 동시에 sum() 및 count()와 같은 집계 함수가 포함된 쿼리를 쉽게 스캔할 수 있습니다. 각 파티션을 병렬 처리하여 최종적으로 모든 파티션에서 얻은 결과만 요약하면 됩니다

만료되었거나 저장할 필요가 없는 데이터의 경우 해당 데이터와 관련된 파티션을 삭제하면 데이터를 빠르게 삭제할 수 있습니다

데이터 배포 더 큰 쿼리 처리량을 얻기 위해 여러 디스크에 걸쳐 쿼리합니다

파티셔닝은 큰 테이블의 데이터를 여러 개의 작은 테이블로 나누는 것과 유사합니다. 쿼리는 전체 테이블을 스캔할 필요가 없으므로 특정 파티션만 필요합니다. 스캔하므로 파티셔닝을 통해 쿼리 속도를 향상시킬 수 있습니다.

수평 샤딩은 사용자가 명시적으로 여러 개의 샤딩 테이블(예: tbl_user0, tbl_user1, tbl_user2)을 미리 생성해야 하며, 클라이언트 에이전트(Sharding-JDBC 등) 또는 중간 소프트웨어 에이전트(Mycat 등)를 통해 물리적으로 여러 테이블을 생성해야 합니다. 테이블 세분화 논리를 구현하는 데 사용됩니다.

파티셔닝은 MySQL의 플러그인 기능으로, 대용량 테이블의 데이터를 데이터베이스 하단의 여러 파티션 파일(예: tbl_user#P#p0.ibd, tbl_user#P#p1.ibd, tbl_user)로 나누는 기능입니다. #P#p2.ibd), 수평 테이블 파티셔닝과 다른 점은 파티션이 명시적으로 "파티션 테이블"을 생성할 필요가 없다는 점입니다. 데이터베이스는 자동으로 파티션 파일을 생성하며 이는 실제로 여러 테이블에 해당합니다. 이것은 사용자에게 차폐되고 투명하며, 어떤 기능도 필요 없이 테이블을 사용하는 것과 완전히 동일합니다. 파티션은 논리적 수평 테이블이지만 여전히 물리적 수준의 테이블입니다.

mysql5.5 이전에는 범위 파티셔닝과 리스트 파티셔닝은 정수 파티셔닝만 지원했으며 추가적인 함수 연산이나 추가적인 변환을 통해 정수를 얻을 수 있었습니다. 열 파티션은 범위 열과 목록 열로 구분되며 정수(tinyint ~ bigint, 소수 및 부동 소수점은 지원되지 않음), 날짜(날짜, 날짜/시간), 문자열(char, varchar, Binary, varbinary)의 세 가지 주요 데이터 유형을 지원합니다. ).

열 분할은 하나 이상의 필드를 분할 키로 지원하지만 표현식은 분할 키로 지원하지 않습니다. 이는 범위 및 목록 분할과 다릅니다. 범위 열 파티션 키의 비교는 튜플 비교, 즉 범위 분할과 다른 필드 그룹 비교를 기반으로 한다는 점에 유의해야 합니다.

 create talbe rc3 (    
    a int,
    b int
)
partition by range columns(a, b) (
    partition p01 values less than (0, 10),
    partition p02 values less than (10, 10),
    partition p03 values less than (10, 20),
    partition p04 values less than (10, 35),
    partition p05 values less than (10, maxvalue),
    partition p06 values less than (maxvalue, maxvalue),
);

insert into rc3(a, b) values(1, 10);

select (1, 10) < (10, 10) from dual;

-- 根据结果存放到p02分区上了
select
    partition_name,
    partition_expression,
    partition_description,
    table_rows
from information_schema.partitions
where table_schema = schema() and table_name = 'rc3';

범위 열 파티션 키 비교(튜플 비교)는 실제로 다중 열 정렬입니다. 먼저 a 필드에 따라 정렬한 다음 b 필드에 따라 정렬합니다. 이는 실제로는 단일 필드 범위의 파티션 정렬 규칙과 동일합니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ












위 내용은 mysql 다중 필드 파티셔닝의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.