Frage

Ich versuche eine Tabelle zu verschieben, die Milliarden Zeilen in ein neues Verzeichnis in MySQL 5.6 enthält. Ich versuche, Tabelle 1 in Tabelle 2 und dort zu kopieren, indem ich Tabelle 1 abögst und dann Tabelle 2 in Tabelle 1 umbenannte.

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

Ich verwende die folgende Prozedur, um die Kopie durchzuführen.

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;

Aber jetzt erhalte ich nach jeder Stapel von 100000 in Tabelle2 Lücken in der ID -Spalte (nach der ID von 199999 ist die nächste ID 262141). Tabelle 1 enthält keine Lücken in der ID -Spalte.

War es hilfreich?

Lösung

Fragen Sie Google: https://www.google.com/search?q=Auto_Increment+Mysql+Gaps+Innodb Das Erstes Ergebnis erklärt dieses Problem.

Im Allgemeinen müssen Sie in der Lage sein, so die Leute zu sagen, was Sie bisher ausprobiert haben und warum es nicht funktioniert. In diesem Fall ist dies nur ein Merkmal/Merkmal des InnoDB -Motors, mit dem sie schnell mit hohen Volumina arbeiten können.

Andere Tipps

Auto -Increment -Felder sind nicht garantiert dicht, sondern nur garantiert, dass Sie eindeutige Werte bieten. Normalerweise Es wird dies tun, indem Sie dich dichte (aufeinanderfolgende) Werte geben, muss es aber nicht. Es reserviert eine Reihe von Werten, die verworfen werden können, wenn sie nicht verwendet werden. Sehen http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top