600GB MySQL 테이블에서 데이터 유형을 INT에서 BIGINT로 변경해야합니다. 이 열에는 고유 한 인덱스가 있습니다. 나는 서명되지 않은 INT를 사용하는 것이 좋지만 BIGINT로 변경하면 거의 같은 고통이 될 것이라고 가정합니다. 테이블 엔진은 InnoDB입니다. 더 쉬운 것 :
- 테이블 변경
- 복사 구조
INSERT INTO (SELECT *)
- 덤프 테이블 및 덤프 파일 테이블 정의 변경
- 다른 거있어?
업데이트 : 요청에 따라 MySQL ver 5.5.15, 외래 키 및 테이블 생성 :
CREATE TABLE `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`f` tinyint(1) NOT NULL,
`i_id` bigint(20) NOT NULL,
`ir_id` int(11) NOT NULL,
`r_c` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`t` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8
고통을 정의하고, 가장 짧은 시간을 걸리십시오 ....? 가장 빠른 결과?
@AlecTeal 최단 시간 소요
—
Noam
어떤 버전의 MySQL입니까? 일부 버전에는 중요
—
ypercubeᵀᴹ
ALTER TABLE ONLINE
합니다. 이 열을 참조하는 외래 키가 있습니까? SHOW CREATE TABLE tablename;
출력 을 보여 주면 도움이 될 것 입니다.
짧은 필드 이름이 테이블 크기를 줄이는 데 도움이되면 600MB가 됩니다.
—
모든 거래의 존