문제

MySQL 5.6의 새로운 디렉토리로 수십억 행이 포함 된 테이블을 이동하려고합니다. 나는 표 1을 표 2에 복사 한 다음 표 1을 떨어 뜨린 다음 표 2를 표 1으로 바꾸어 표 2로 복사하려고한다.

    CREATE TABLE `table2` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `col1` int(11) DEFAULT NULL,
  `col2` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_col1_col2` (`col1`,`col2`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 DATA DIRECTORY='/mysql_data/';

아래 절차를 사용하여 사본을 수행하고 있습니다.

DROP PROCEDURE IF EXISTS copytables;
CREATE PROCEDURE `copytables`()
begin
DECLARE v_id INT(11) unsigned  default 0;
declare maxid int(11) unsigned  default 0;
select max(id) into maxid from table1;
while v_id < maxid  do
insert into table2(col1,col2)
select fbpost_id,fbuser_id from table1 where id >= v_id and id <v_id+100000 ;
set v_id=v_id+100000;
select v_id;
select max(id) into maxid from table1;
select maxid;
end while;
end;

그러나 이제는 표 2의 100000 배치마다 ID 열에서 간격을 얻고 있습니다 (ID 19999 이후 다음 ID는 262141입니다). 표 1은 ID 열에 간격이 포함되어 있지 않습니다.

도움이 되었습니까?

해결책

구글에게 물어보세요 : https://www.google.com/search?q=auto_increment+mysql+gaps+innodb 그만큼 첫 번째 결과 이 문제를 설명합니다.

일반적으로 사람들에게 지금까지 시도한 것과 왜 작동하지 않는지 말할 수 있어야합니다. 이 경우, 이것은 InnoDB 엔진의 기능/특성 일뿐 아니라 높은 볼륨으로 빠르게 작동 할 수 있습니다.

다른 팁

자동 증분 필드는 밀도가 높지 않으며 고유 한 가치를 제공 할 수 있습니다. 대개 조밀 한 (연속적인) 값을 제공함으로써 그렇게 할 것입니다. 그러나 필요하지 않습니다. 사용하지 않으면 폐기 할 수있는 여러 값을 보유합니다. 보다 http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top