質問

数十億行を含むテーブルをMySQL 5.6の新しいディレクトリに移動しようとしています。 Table1をTable2にコピーして、Table1をドロップし、Table2を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/';

以下の手順を使用してコピーを作成しています。

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;

しかし、今では、Table2の100000のすべてのバッチの後にID列でギャップを取得しています(ID 19999の後、次のIDは262141です)。 Table1には、ID列にギャップが含まれていません。

役に立ちましたか?

解決

Googleに尋ねる: https://www.google.com/search?q=auto_increment+mysql+ gaps+ innnodb 最初の結果 この問題を説明します。

一般的に、あなたがこれまでに試したこと、そしてそれが機能していない理由を人々に伝えることができる必要があります。この場合、これはInnoDBエンジンの特徴/特性であり、大量に迅速に動作できます。

他のヒント

自動増分フィールドは密度が高いことは保証されておらず、独自の価値を提供することが保証されています。 いつもの 密な(連続)値を与えることでそうしますが、そうする必要はありません。使用しない場合は破棄することができる多くの値を予約します。見る http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top