programing

MySQL "Alter Table Add Column After Column"의 성능 - 큰 테이블에서

lastcode 2023. 9. 19. 21:12
반응형

MySQL "Alter Table Add Column After Column"의 성능 - 큰 테이블에서

다음 명령을 사용하여 기존 테이블에 열을 추가합니다.

ALTER TABLE foo ADD COLUMN bar AFTER COLUMN old_column;

이 옵션이 동일한 명령보다 상당히 오래 걸릴 수 있습니까?AFTER COLUMN옵션, 다음과 같이?

ALTER TABLE foo ADD COLUMN bar;

첫 번째 명령은 실행 중에 tmp 테이블 공간을 더 많이 사용하여 작업을 수행합니까?

컨텍스트:매우 큰 테이블(10억개 이상의 행을 생각)을 가지고 있는데 다음을 사용하여 추가 열을 추가하고자 합니다.AFTER COLUMN하지만 너무 많은 불이익을 받고 싶지는 않습니다.

제가 할 수 있는 일은 이렇습니다.

CREATE TABLE newtable LIKE oldtable;
ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED NOT NULL DEFAULT 0; 

저는 당신의 칼럼의 종류를 모릅니다.INT로 예를 들어보겠습니다.이제 여기서 이 새 열을 추가할 위치를 지정할 수 있습니다.기본적으로 AFTER 키워드를 지정하지 않는 한 마지막에 추가됩니다. 입력할 경우 삽입할 순서대로 지정해야 합니다. 그렇지 않으면 마지막에 추가해야 합니다.

INSERT INTO newtable SELECT field1, field2, field3 /*etc...*/, newcolumn = 0 FROM oldtable; 

또는 열 사이에 추가한 경우:

# eg: ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED  NULL AFTER field2; 
INSERT INTO newtable SELECT field1, field2, newcolumn = 0, field3 /*etc...*/ FROM oldtable; 

배치로 수행하려면 where 절을 추가할 수 있습니다.

모든 기록들이 그곳에 도착하면,

DROP TABLE oldtable;
RENAME TABLE newtable to oldtable;

다른 테이블을 만들고 새 테이블을 변경합니다.(제우스의 서처럼)

그리고 사용.ALTER TABLE newtable DISABLE KEYS그리고.ALTER TABLE newtable ENABLE KEYS쿼리를 삽입하기 전과 후에 더 빠르게 만들 수 있습니다.(아래와 같이)

CREATE TABLE newtable ....;
ALTER TABLE newtable ....;

ALTER TABLE newtable DISABLE KEYS;
INSERT INTO newtable ....;
ALTER TABLE newtable ENABLE KEYS;

DROP TABLE oldtable;

다른 답변들은 테이블에 열을 추가하는 데 필요한 구문의 예로서 유용하지만, 실제 질문에 대한 답변은 N.B.가 제공했습니다.


  • 기록을 이동해야 하기 때문에 CPU 사용량이 더 많아질 것입니다.
  • 메모리 사용의 관점에서 보면 AFTER COLUMN 옵션과 AFTER COLUMN 옵션이 없는 경우는 같습니다.
  • 대부분의 경우 tmp 테이블이 만들어집니다.Tmp 테이블을 만들지 않고 수많은 리소스를 낭비하는 핫 스키마 변경(TokuDB는 하나임)을 지원하는 MySQL 엔진이 있습니다.
  • 그러나 MyISAM 또는 InnoDB를 사용하여 이 작업을 수행하는 경우 "After COLUMN" 옵션은 레코드 이동으로 인해 시간이 조금소요됩니다.

    – N.B.

언급URL : https://stackoverflow.com/questions/8190228/performance-of-mysql-alter-table-add-column-after-column-on-a-large-table

반응형