Question

J'essaie de déplacer une table qui contient des milliards de lignes vers un nouveau répertoire dans MySQL 5.6. J'essaie de copier la table1 sur la table2 et là-bas en abandonnant la table1, puis en renommant la table2 à la table1.

    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/';

J'utilise la procédure ci-dessous pour faire la copie.

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;

Mais maintenant, je reçois des lacunes dans la colonne d'ID après chaque lot de 100000 dans le tableau2 (après l'ID 199999, l'identifiant suivant est 262141). Le tableau 1 ne contient aucune lacune dans la colonne ID.

Était-ce utile?

La solution

Demandez à Google: https://www.google.com/search?q=Auto_Increment+Mysql+gaps+InNodb La premier résultat explique ce problème.

Généralement, vous devez être en mesure de dire pour les gens ce que vous avez essayé jusqu'à présent et pourquoi cela ne fonctionne pas. Dans ce cas, il s'agit d'une caractéristique / caractéristique du moteur InNODB qui le permet de fonctionner rapidement à des volumes élevés.

Autres conseils

Les champs d'incrément automatique ne sont pas garantis pour être denses, ils sont juste garantis pour vous donner des valeurs uniques. Généralement Il le fera en vous donnant des valeurs denses (consécutives), mais il n'est pas nécessaire. Il réservera un certain nombre de valeurs, qui peuvent être jetées si elles ne sont pas utilisées. Voir http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top