사용자 도구

사이트 도구


database:mysql:partition

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
마지막 판 양쪽 다음 판
database:mysql:partition [2019/01/31 20:05]
kwon37xi
database:mysql:partition [2019/01/31 20:17]
kwon37xi
줄 6: 줄 6:
 ===== 단점 / 제약 ===== ===== 단점 / 제약 =====
   * [[https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations.html|MySQL :: MySQL 5.7 Reference Manual :: 22.6 Restrictions and Limitations on Partitioning]]   * [[https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations.html|MySQL :: MySQL 5.7 Reference Manual :: 22.6 Restrictions and Limitations on Partitioning]]
 +  * 한 테이블 파티션의 최대 개수는 8192 개이다(NDB 제외).
 +  * 파티션 갯수가 많아지면 open files 도 커져야 한다. [[linux:performance|Linux Performance]]
   * 모든 파티션은 동일한 스토리지 엔진 사용 : 파티션별 다른 엔진을 지정하여도 에러가 발생하지는 않지만 적용되는것은 아니다.   * 모든 파티션은 동일한 스토리지 엔진 사용 : 파티션별 다른 엔진을 지정하여도 에러가 발생하지는 않지만 적용되는것은 아니다.
   * 테이블과 인덱스를 별도로 파티션 할수는 없다. 테이블과 인덱스를 같이 Partitioning 하여야 한다.   * 테이블과 인덱스를 별도로 파티션 할수는 없다. 테이블과 인덱스를 같이 Partitioning 하여야 한다.
줄 11: 줄 13:
   * Partition 된 테이블은 FullText Index 를 지원하지 않는다.   * Partition 된 테이블은 FullText Index 를 지원하지 않는다.
   * Partition 된 테이블은 Geometry(point, geometry...) 컬럼 타입을 지원하지 않는다.   * Partition 된 테이블은 Geometry(point, geometry...) 컬럼 타입을 지원하지 않는다.
-  * 한 테이블당 파티션의 갯수는 최대 1,024개이다. 
   * Temp Table 은 파티션 사용 불가.   * Temp Table 은 파티션 사용 불가.
   * Partition 값은 정수형이어야 한다.   * Partition 값은 정수형이어야 한다.
   * 테이블이 Unique 또는 Primary Key를 가지고 있다면, 파티션키는 모든 Unique 또는 Primary Key의 일부 또는 모든 컬럼을 포함해야 한다.   * 테이블이 Unique 또는 Primary Key를 가지고 있다면, 파티션키는 모든 Unique 또는 Primary Key의 일부 또는 모든 컬럼을 포함해야 한다.
   * 파티션 키의 표현식은 일반적으로 컬럼 그 자체 또는 MySQL 내장 함수를 사용할 수 있는데, 여기서 MySQL 내장 함수를 모두 사용할 수 있는 것이 아니라 일부만 사용할 수 있습니다. (자세한 함수 목록은 현재 사용중인  MySQL 버전의 매뉴얼을 참고합니다.) 하지만 이 함수 중에서도 정상적으로 파티션 프루닝(Pruning)을 지원하는 함수는 YEAR()와 TO_DAYS(), TO_SECONDS()밖에 없으므로 제대로 파티션의 기능을 이용하려고 한다면 INTEGER 타입의 컬럼 그 자체 또는 이 3가지 내장 함수를 사용한 표현식을 파티션 키로 사용할 것을 권장합니다. (TO_SECONDS 함수는 MySQL 5.5부터 지원됩니다.)   * 파티션 키의 표현식은 일반적으로 컬럼 그 자체 또는 MySQL 내장 함수를 사용할 수 있는데, 여기서 MySQL 내장 함수를 모두 사용할 수 있는 것이 아니라 일부만 사용할 수 있습니다. (자세한 함수 목록은 현재 사용중인  MySQL 버전의 매뉴얼을 참고합니다.) 하지만 이 함수 중에서도 정상적으로 파티션 프루닝(Pruning)을 지원하는 함수는 YEAR()와 TO_DAYS(), TO_SECONDS()밖에 없으므로 제대로 파티션의 기능을 이용하려고 한다면 INTEGER 타입의 컬럼 그 자체 또는 이 3가지 내장 함수를 사용한 표현식을 파티션 키로 사용할 것을 권장합니다. (TO_SECONDS 함수는 MySQL 5.5부터 지원됩니다.)
 +
 +===== Partition 관련 명령 =====
 +  * [[https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html|MySQL :: MySQL 5.7 Reference Manual :: 13.1.8.1 ALTER TABLE Partition Operations]]
 +
 +==== DROP PARTITION ====
 +  * 파티션 자체를 삭제한다. 데이터도 함께. <code>
 +ALTER TABLE t1 DROP PARTITION p0, p1;
 +</code>
 +  * 파티션의 데이터를 비운다. 파티션 자체는 계속 존재한다.<code>
 +CREATE TABLE t1 (
 +    id INT,
 +    year_col INT
 +)
 +PARTITION BY RANGE (year_col) (
 +    PARTITION p0 VALUES LESS THAN (1991),
 +    PARTITION p1 VALUES LESS THAN (1995),
 +    PARTITION p2 VALUES LESS THAN (1999),
 +    PARTITION p3 VALUES LESS THAN (2003),
 +    PARTITION p4 VALUES LESS THAN (2007)
 +);
 +
 +ALTER TABLE t1 TRUNCATE PARTITION p0;
 +-- 아래와 동일
 +DELETE FROM t1 WHERE year_col < 1991;
 +
 +-- 복수개 삭제
 +ALTER TABLE t1 TRUNCATE PARTITION p1, p3;
 +
 +-- 진짜로 해당 파티션 데이터가 삭제 됐는지 확인
 +SELECT PARTITION_NAME, TABLE_ROWS
 +    FROM INFORMATION_SCHEMA.PARTITIONS
 +    WHERE TABLE_NAME = 't1';
 +</code>
  
 ===== 참조 ===== ===== 참조 =====
database/mysql/partition.txt · 마지막으로 수정됨: 2019/08/30 15:11 저자 kwon37xi