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
'programing' 카테고리의 다른 글
mariadb JSON_UNCOTEGET's overned's special characters (0) | 2023.09.24 |
---|---|
XML 파일을 읽고 쓰는 방법? (0) | 2023.09.19 |
IntelliJ와 로컬 MySQL을 연결하는 방법은? (0) | 2023.09.19 |
MySQL 쿼리에서 세미콜론을 생략하는 것이 나쁜가요? (0) | 2023.09.19 |
ORA-01408: 해당 열 목록은 이미 색인화되어 있습니다. (0) | 2023.09.19 |