>  기사  >  데이터 베이스  >  mysql 테이블의 파티션 형식은 무엇입니까?

mysql 테이블의 파티션 형식은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-10-19 16:07:282657검색

mysql 테이블의 파티셔닝 형식은 다음과 같습니다. 1. RANGE 파티셔닝은 주어진 연속 간격에 속하는 열 값을 기반으로 하며 여러 행이 파티션에 할당됩니다. 2. LIST 파티셔닝은 특정 간격과 일치하는 열 값을 기반으로 합니다. 3. HASH 파티션은 사용자 정의 표현식의 반환 값을 기반으로 선택되는 파티션입니다.

mysql 테이블의 파티션 형식은 무엇입니까?

추가 관련 무료 학습 권장 사항: mysql 튜토리얼(동영상)

mysql 테이블의 파티션 형식은 다음과 같습니다.

일반 용어로 테이블 파티셔닝은 조건에 따라 큰 테이블을 여러 개의 작은 테이블로 나누는 것입니다. Mysql5.1은 데이터 테이블 파티셔닝을 지원하기 시작합니다. 예를 들어, 사용자 테이블에 600만 개 이상의 레코드가 있는 경우 데이터베이스에 입력된 날짜에 따라 테이블을 분할하거나 위치에 따라 테이블을 분할할 수 있습니다. 물론 파티셔닝은 다른 조건에 따라 이루어질 수도 있습니다.

둘째, 테이블을 파티션해야 하는 이유

대형 테이블과 다양한 액세스 모드를 갖춘 테이블의 확장성, 관리성 및 데이터베이스 효율성을 향상시키기 위해. 파티셔닝의 장점은 다음과 같습니다.

단일 디스크나 파일 시스템 파티션보다 더 많은 데이터를 저장할 수 있습니다.

  • 저장의 의미를 잃은 데이터는 일반적으로 해당 데이터와 관련된 파티션을 삭제하면 쉽게 삭제할 수 있습니다. 반대로, 어떤 경우에는 새 데이터를 위해 특별히 새 파티션을 추가하여 새 데이터를 추가하는 프로세스를 쉽게 구현할 수 있습니다. 파티셔닝과 일반적으로 관련된 다른 이점은 아래 나열된 이점을 포함합니다. MySQL 파티셔닝의 이러한 기능은 아직 구현되지 않았지만 5.1의 프로덕션 버전에 포함되기를 희망합니다.

  • 일부 쿼리는 주로 주어진 WHERE 문을 만족하는 데이터를 하나 이상의 파티션에만 저장할 수 있으므로 검색할 때 나머지 파티션을 찾을 필요가 없다는 점을 통해 크게 최적화될 수 있습니다. 분할된 테이블이 생성된 후에 분할을 수정할 수 있으므로 처음 분할 구성표를 구성할 때 데이터를 재구성하지 않은 경우 일반적으로 사용되는 쿼리의 효율성을 높이기 위해 데이터를 재구성할 수 있습니다.

  • SUM() 및 COUNT()와 같은 집계 함수와 관련된 쿼리는 병렬로 쉽게 처리될 수 있습니다. 이러한 쿼리의 간단한 예는 "SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;"입니다. "병렬"이란 쿼리가 각 파티션에서 동시에 실행될 수 있으며 최종 결과는 단순히 모든 파티션에서 얻은 결과의 합계임을 의미합니다.

  • 데이터 쿼리를 여러 디스크에 분산하여 쿼리 처리량을 높이세요.

  • 3. 파티션 유형

RANGE 파티셔닝: 주어진 연속 범위에 속하는 열 값을 기준으로 여러 행을 파티션에 할당합니다.

  • LIST 파티셔닝: RANGE별 파티셔닝과 유사하지만, LIST 파티셔닝은 개별 값 집합의 특정 값과 일치하는 열 값을 기준으로 선택된다는 차이점이 있습니다.

  • HASH 파티셔닝: 테이블에 삽입될 행의 열 값을 사용하여 계산되는 사용자 정의 표현식의 반환 값을 기반으로 선택 항목을 파티셔닝합니다. 이 함수에는 음수가 아닌 정수 값을 생성하는 MySQL의 유효한 표현식이 포함될 수 있습니다.

  • KEY 파티셔닝: HASH에 의한 파티셔닝과 유사하지만, KEY 파티셔닝은 하나 이상의 열 계산만 지원하고 MySQL 서버는 자체 해시 함수를 제공한다는 차이점이 있습니다. 정수 값을 포함하는 열이 하나 이상 있어야 합니다.

  • RANGE 파티셔닝

주어진 연속 범위에 속하는 열 값을 기반으로 여러 행을 파티션에 할당합니다. 이러한 간격은 연속적이어야 하며 서로 겹칠 수 없습니다. VALUES LESS THAN 연산자를 사용하여 정의하세요. 아래는 예시입니다.

Sql 코드:

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)
);

이 분할 방식에 따르면 매장 1~5에서 근무하는 직원에 해당하는 모든 행은 파티션 P0에 저장되고, 매장 6~10의 직원은 P1에 저장되는 식입니다. 각 파티션은 가장 낮은 것부터 가장 높은 것까지 순차적으로 정의됩니다. 이는 PARTITION BY RANGE 구문의 요구 사항이며 C 또는 Java의 "switch ... case" 문과 유사합니다. 데이터(72, 'Michael', 'Widenius', '1998-06-25', NULL, 13)를 포함하는 새 행의 경우 p2 파티션에 삽입될지 쉽게 판단할 수 있지만 숫자 추가되었습니다. 21호점은 어떻게 될까요? 이 시나리오에서는 store_id가 20보다 큰 상점을 포함하는 규칙이 없으므로 서버는 행을 저장할 위치를 알 수 없으므로 오류가 발생합니다. 명시적으로 지정된 최고 값보다 큰 모든 값을 제공하는 CREATE TABLE 문에서 "catchall" VALUES LESS THAN 절을 사용하면 이 오류를 피할 수 있습니다.

Sql 코드:

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 MAXVALUE
);

MAXVALUE 表示最大的可能的整数值。现在,store_id 列值大于或等于16(定义了的最高值)的所有行都将保存在分区p3中。在将来的某个时候,当商店数已经增长到25, 30, 或更多 ,可以使用ALTER TABLE语句为商店21-25, 26-30,等等增加新的分区。在几乎一样的结构中,你还可以基于雇员的工作代码来分割表,也就是说,基于job_code 列值的连续区间。例如——假定2位数字的工作代码用来表示普通(店内的)工人,三个数字代码表示办公室和支持人员,四个数字代码表示管理层,你可以使用下面的语句创建该分区表:

Sql代码:

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 (job_code) (
    PARTITION p0 VALUES LESS THAN (100),
    PARTITION p1 VALUES LESS THAN (1000),
    PARTITION p2 VALUES LESS THAN (10000)
);

在这个例子中, 店内工人相关的所有行将保存在分区p0中,办公室和支持人员相关的所有行保存在分区p1中,管理层相关的所有行保存在分区p2中。在VALUES LESS THAN 子句中使用一个表达式也是可能的。这里最值得注意的限制是MySQL 必须能够计算表达式的返回值作为LESS THAN (8b383481491e7882009c7f5856aa4cf3= num: ·  设置 V = CEIL(V / 2) ·  设置 N = N & (V – 1) 例如,假设表t1,使用线性哈希分区且有4个分区,是通过下面的语句创建的: CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6; 现在假设要插入两行记录到表t1中,其中一条记录col3列值为’2003-04-14′,另一条记录col3列值为’1998-10-19′。第一条记录将要保存到的分区确定如下: V = POWER(2, CEILING(LOG(2,7))) = 8 N = YEAR(’2003-04-14′) & (8 – 1)    = 2003 & 7    = 3 (3 >= 6 为假(FALSE): 记录将被保存到#3号分区中) 第二条记录将要保存到的分区序号计算如下: V = 8 N = YEAR(’1998-10-19′) & (8-1)   = 1998 & 7   = 6 (6 >= 4 为真(TRUE): 还需要附加的步骤) N = 6 & CEILING(5 / 2)   = 6 & 3   = 2   (2 >= 4 为假(FALSE): 记录将被保存到#2分区中) 按照线性哈希分区的优点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有极其大量(1000吉)数据的表。它的缺点在于,与使用常规HASH分区得到的数据分布相比,各个分区间数据的分布不大可能均衡。

KSY分区

类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

Sql代码:

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

在KEY分区中使用关键字LINEAR和在HASH分区中使用具有同样的作用,分区的编号是通过2的幂(powers-of-two)算法得到,而不是通过模数算法。

위 내용은 mysql 테이블의 파티션 형식은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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