Автоматические отверстия в операторе вставки MySQL 5.6

StackOverflow https://stackoverflow.com/questions/19844449

  •  29-07-2022
  •  | 
  •  

Вопрос

Я пытаюсь переместить таблицу, которая содержит миллиарды рядов в новый каталог в MySQL 5.6. Я пытаюсь скопировать Table1 до Table2 и там, сбросив таблицу1, а затем переименовав таблицу2 до 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;

Но теперь я получаю пробелы в столбце ID после каждой партии 100000 в таблице 2 (после ID 199999 Next Id 262141). Таблица 1 не содержит никаких пробелов в столбце ID.

Это было полезно?

Решение

Спросите Google: https://www.google.com/search?q=auto_increment+mysql+gaps+innondb А первый результат объясняет эту проблему.

Как правило, вы должны быть в состоянии рассказать, чтобы люди, которые вы пробовали до сих пор и почему это не работает. В этом случае это всего лишь особенность/характеристика двигателя InnoDB, который позволяет ему быстро работать в больших объемах.

Другие советы

Поля автоматического приращения не гарантированно не будут плотными, они просто гарантированно дадут вам уникальные значения. Обычно Это сделает это, давая вам плотные (последовательные) ценности, но это не должно. Он оставит несколько значений, которые можно отказаться, если не использовать. Видеть http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top