MySQL 테이블 파티션을 테이블로 승격

Aug 17 2020

내 Google 검색 기술로는 이에 대한 해결책을 찾지 못했습니다. 가능한 경우 테이블의 파티션을 자체적으로 테이블로 승격하려면 어떻게해야합니까?

의 내가 가진 가정하자 part0, part1하고 part2. 어떤 거기에 ALTER TABLE내가 그 변환을 줄 수있는 part0새 테이블로?

제 생각에는 데이터가 디스크의 별도 파일에 이미 존재하기 때문에 테이블 생성 프로세스가 SELECT쿼리를 사용하여 새 테이블을 생성하는 것보다 빠를 수 있습니다 .

답변

RolandoMySQLDBA Aug 17 2020 at 23:04

당신은 필요하지 않습니다 SELECT. 이것은 순수한 DDL로 수행 할 수 있습니다.

이 예에서 파티션을 나눈 테이블이 다음과 같다고 가정합니다.

  1. 데이터 베이스 mydb
  2. mytable
  3. 파티션 ( part0, part1, part2)

까다로울 수 있지만 여기에 있습니다.

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;

이것이하는 일은 mynewtable다른 모든 측면에서 파티션과 동일한 스키마없이 먼저 만드는 것입니다. 그런 다음 mynewtable테이블을 part0.

확실하지 않은 경우 다음을 실행하십시오.

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;

의 행을 검사 mynewtable하고 새로운 part0및 확인

  • mynewtable 원본의 데이터가 있습니다 part0
  • 새 항목 part0은 비어 있어야합니다.

조옮김이 작동했다고 확신하면 다음을 실행하십시오.

ALTER TABLE mytable DROP PARTITION p0;

실험실 또는 sqlfiddle에서 이것을 테스트하십시오. 시도 해봐 !!!

RickJames Aug 17 2020 at 21:54

예, a PARTITIONTABLE. 그러나 파티션을 테이블로 또는 그 반대로 전환하려면 몇 가지 특별한 명령이 필요합니다.

"transportable tablespaces"및 FLUSH TABLES ptable FOR EXPORT를 참조하십시오. ALTER TABLE ptable DISCARD TABLESPACE; ALTER TABLE ptable IMPORT TABLESPACE. 세부 사항은 MySQL 5.6과 5.7 이상에서 다릅니다.

http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioning 기술을 논의하는 몇 곳의 링크가 있습니다.