>  기사  >  데이터 베이스  >  MySQL Advanced 15 - 테이블 파티셔닝

MySQL Advanced 15 - 테이블 파티셔닝

黄舟
黄舟원래의
2016-12-29 17:00:40994검색

1. 파티셔닝을 사용하는 이유는 무엇입니까?

데이터의 양이 너무 많은 경우(보통 수백만 또는 수천만 개의 데이터) 한 테이블의 데이터를 여러 테이블로 나누어 저장해야 합니다. 일부 쿼리는 크게 최적화될 수 있습니다. 주로 지정된 WHERE 문을 충족하는 데이터가 하나 이상의 파티션에만 저장될 수 있으므로 검색 시 다른 나머지 파티션을 찾을 필요가 없기 때문입니다.

2. mysql이 파티셔닝을 지원하는지 확인하세요

mysql이 파티셔닝을 지원하는지 확인하려면 다음 명령어를 사용하세요. ?

show variables like '%partition%';


- 출력 변수가 yes이면 mysql이 파티셔닝을 지원한다는 의미입니다.

3. 범위 파티션
CREATE TABLE employees (
  id INT NOT NULL,
  fname VARCHAR(30),
  lname VARCHAR(30),
  hired DATE NOT NULL DEFAULT '1970-01-01',
  separated DATE NOT NULL DEFAULT '9999-12-31',
  job_code INT NOT NULL,
  store_id INT NOT NULL
)

partition BY RANGE (store_id) (
	partition p0 VALUES LESS THAN (6),
	partition p1 VALUES LESS THAN (11),
	partition p2 VALUES LESS THAN (16),
	partition p3 VALUES LESS THAN (21)
);

이 예에서는 매장 직원과 관련된 모든 행이 파티션 p0에 저장되고 사무실 및 지원 직원과 관련된 모든 행이 파티션에 저장됩니다. p1, 관리 계층과 관련된 모든 행은 파티션 p2에 저장됩니다.

뷰 파티션

show create table employees;


4. 리스트 파티셔닝

은 RANGE 파티셔닝과 유사하지만 차이점은 LIST 파티셔닝을 기반으로 한다는 점입니다. 열 값 일치 시 불연속 값 집합에서 값을 선택합니다.

LIST 파티셔닝은 "PARTITION BY LIST(expr)"를 사용하여 수행됩니다. 여기서 "expr"은 특정 열 값 또는 특정 열 값을 기반으로 하는 정수입니다. 정수 값 표현식을 반환한 다음 "VALUES IN (value_list)"로 각 파티션을 정의합니다. 여기서 "value_list"는 쉼표로 구분된 정수 목록입니다.

create table category_part( cid int unsigned not null auto_increment,cname varchar(64) not null,parent_id int not null,primary key (cid,parent_id))
partition by list(parent_id)(
partition p1 values in (1,2,3,6,9),
partition p2 values in (4,5,10,22,23),
partition p3 values in (7,8,11,12,13),
partition p4 values in (14,15,16,17,20),
partition p5 values in (18,19,21,24,25)
);

5. HASH 파티셔닝

해시 파티셔닝의 목적은 미리 정의된 파티션에 데이터를 균등하게 분배하여 각 파티션의 데이터 양을 보장하는 것입니다. 대략 동일합니다. RANGE 및 LIST 파티션에서는 특정 열 값 또는 열 값 세트를 저장할 파티션을 명시적으로 지정해야 하며, HASH 파티셔닝에서는 MYSQL이 자동으로 이러한 작업을 완료하며 사용자가 수행해야 하는 모든 작업은 데이터를 기반으로 합니다. 열 값은 열 값 또는 표현식을 지정하고, 분할된 테이블을 나눌 파티션 수를 지정합니다.

HAHS 파티셔닝을 사용하여 테이블을 분할하려면 CREATE TABLE 문에 PARTITION BY HASH(expr) 절을 추가합니다. 여기서 "expr"은 정수를 반환하는 표현식입니다. expr은 필드 유형이 정수인 열 이름일 수 있습니다. 또한 사용자는 나중에 PARTITITIONS num 절을 추가해야 할 수도 있습니다. 여기서 num은 분할할 파티션 수를 나타내는 음수가 아닌 정수입니다. PARTITIONS 절이 포함되지 않은 경우 파티션 수는 기본적으로 1개입니다.

create table t_hash (
a int,
b datetime)
partition by hash (YEAR(b))
partitions 4;

LINEAR HASH 파티셔닝의 장점은 파티션 추가, 삭제, 병합, 분할 속도가 빨라져 처리에 유리합니다. 많은 양의 데이터. 단점은 HASH 파티셔닝을 사용하여 얻은 데이터 분포와 비교하여 각 파티션 간의 데이터 분포가 균형을 이루지 못할 수 있다는 것입니다.

6. 키 파티션

create table orders_key
(
id int auto_increment,
customer_surname varchar(30),
store_id int,
alesperson_id int,
order_Date date,
note varcahr(500),
index_idx(id)
) engine=myisam partition by key(order_date) partitions 4;

이 파티션은 MySQL 서버가 다른 유형의 파티션과 달리 자체 해시 표현식을 사용한다는 점을 제외하면 해시 파티션과 유사합니다. int 또는 null 표현식.

위 내용은 MySQL Advanced Fifteen - Table Partitioning의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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