2017-11-21 14 views
1

우리는로드 한 여러 테이블 (행 각각 수억)하지만 다음 쿼리는 전체 테이블을 필요로합니다 (유형은 AUTO_INCREMENT에서 떨어져 완전히 동일) 다시 작성합니다 :왜 MODIFY AUTO_INCREMENT가 테이블을 다시 작성해야합니까?

ALTER TABLE sales MODIFY id BIGINT(20) NOT NULL AUTO_INCREMENT; 

이 단지인가 MySQL에 의한 거대한 감시 또는 디스크상의 데이터 포맷을 근본적으로 변경합니까?

답변

1

열의 AUTO_INCREMENT 특성 변경은 온라인 DDL 변경으로 수행 할 수 없습니다. 심지어 내가 명시 적으로 요청하려고하면

mysql> alter table sales modify column id bigint not null auto_increment, 
    ALGORITHM=INPLACE; 

ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. 
Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. 

열 정의를 변경하는이 경우는 (오류 메시지 기준) 열 형식의 변경으로 간주하는 것 같다.

https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html#innodb-online-ddl-summary-grid는 말한다 :

변경 열 데이터 유형이 ... 만 여전히 제외하고, 테이블을 다시 작성하는 데 필요한 컬럼의 유형을 변경 알고리즘의 = MySQL의 5.7에서

복사 지원 하나의 경우 : 증가하는 VARCHAR 길이는 INPLACE 변경으로 허용됩니다. https://bugs.mysql.com/bug.php?id=72109

:

당신은이 테이블 구조 조정을 수행하지 않고 AUTO_INCREMENT 속성을 변경하도록 허용해야한다고 생각하는 유일한 사람이 있습니다