source

MYSQL 파티셔닝이란

factcode 2022. 12. 5. 21:14
반응형

MYSQL 파티셔닝이란

설명서(http://dev.mysql.com/doc/refman/5.1/en/partitioning.html),)는 잘 읽었지만, 어떤 내용인지, 왜 사용하는지 알고 싶습니다.

  1. 주로 여러 서버에 사용되므로 1대의 서버를 다운시키지 않습니까?
  2. 따라서 데이터의 일부는 server1에 있고 일부는 server2에 있습니다.서버 3은 서버 1 또는 서버 2를 가리킵니다.이렇게 작동합니까?
  3. MYSQL 문서에서는 같은 서버 내의 파티셔닝에 초점을 맞추고 있는 이유는 무엇입니까?서버에 분산하는 것을 목적으로 하고 있습니다.

파티셔닝의 배후에 있는 아이디어는 여러 서버를 사용하는 것이 아니라 하나의 테이블 대신 여러 테이블을 사용하는 것입니다.테이블을 여러 테이블로 분할하여 하나의 하위 테이블에 이전 데이터를 저장하고 다른 테이블에 새 데이터를 저장할 수 있습니다.그러면 데이터베이스는 두 번째 테이블에 있는 새 데이터를 알고 새 데이터를 요청하는 쿼리를 최적화할 수 있습니다.또한 데이터 분할 방법을 정의합니다.

MySQL 문서의 간단한 예:

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,
    store_id INT
)
PARTITION BY RANGE ( YEAR(separated) ) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (1996),
    PARTITION p2 VALUES LESS THAN (2001),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

이를 통해 다음과 같이 속도를 높일 수 있습니다.

  1. 간단한 방법으로 오래된 데이터 삭제:

    ALTER TABLE employees DROP PARTITION p0;
    
  2. 데이터베이스는 다음과 같은 쿼리 속도를 높일 수 있습니다.

    SELECT COUNT(*)
    FROM employees
    WHERE separated BETWEEN '2000-01-01' AND '2000-12-31'
    GROUP BY store_id;
    

모든 데이터가 p2 파티션에만 저장된다는 것을 인식합니다.

분할된 테이블은 여러 개의 물리적 하위 테이블로 구성된 단일 논리 테이블입니다.파티셔닝 코드는 실제로는 기본 파티션을 나타내는 일련의 핸들러 개체를 감싸는 래퍼일 뿐이며 요청을 핸들러 개체를 통해 스토리지 엔진으로 전송합니다.파티셔닝은 SQL 계층에서 기본 파티션을 숨기는 일종의 블랙박스입니다. 단, 파일 시스템을 보면 쉽게 알 수 있습니다.여기서는 해시 구분 명명 규칙이 있는 컴포넌트 테이블을 볼 수 있습니다.

예를 들어, 다음은 매년 판매량을 별도의 파티션에 배치하는 간단한 방법입니다.

CREATE TABLE sales (
 order_date DATETIME NOT NULL,
 -- Other columns omitted
) ENGINE=InnoDB PARTITION BY RANGE(YEAR(order_date)) (
 PARTITION p_2010 VALUES LESS THAN (2010),
 PARTITION p_2011 VALUES LESS THAN (2011),
 PARTITION p_2012 VALUES LESS THAN (2012),
 PARTITION p_catchall VALUES LESS THAN MAXVALUE );

자세한 것은 이쪽을 참조해 주세요.

실제로는 다른 서버 인스턴스를 사용하는 것이 아니라(그럴 수도 있지만), 테이블을 다른 물리 파티션으로 분할하는 것이 더 중요합니다.

테이블과 인덱스를 더 작은 조각으로 나누고 심지어 더 작은 조각으로 세분화합니다.하나의 큰 창고(큰 테이블 하나)에 서로 다른 주제와 다른 연도의 수백만 개의 잡지가 있다고 생각해 보십시오.칸막이는 큰 창고 안의 다른 방에 그것들을 배치하는 것을 의미합니다.이들은 여전히 하나의 웨어하우스 내에 속하지만 이제 데이터베이스 분할 전략에 따라 논리적인 수준에서 그룹화할 수 있습니다.

인덱싱은 실제로 창고 또는 창고 내 방에 어떤 잡지가 있는지 표를 보관하는 것과 같습니다.보시다시피 데이터베이스 파티셔닝과 인덱싱 사이에는 큰 차이가 있으며 이 두 가지를 함께 매우 잘 사용할 수 있습니다.

데이터베이스 파티션에 대한 자세한 내용은 제 웹사이트에서 확인하실 수 있습니다.

언급URL : https://stackoverflow.com/questions/1579930/what-is-mysql-partitioning

반응형