2016-04-25 1 views
0

У меня есть таблица 8Go в моей базе данных CloudSQL, которая (пока) не имеет первичного ключа. Он состоит из 52 миллионов строк по 20 столбцов каждый.Ошибка 1114: таблица заполняется при вставке AUTO_INCREMENT в облаках

Я хотел бы добавить один, так как я буду удалять дубликаты и делать это без первичного ключа слишком timeconsuming для MySQL

Однако, я имею вопросы, чтобы сделать этот бег, и мне интересно, если я m фактически делает это наиболее эффективным способом.

Я хотел бы добавить этот первичный ключ, используя следующую строку:

ALTER TABLE mytable ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST 

Я ожидал, что этот запрос, чтобы увеличить размер моей базы данных на несколько сотен Мб, и работать достаточно быстро.

Однако, когда я запускал запрос, я увидел, увеличить использование базы данных много (+ 14 ГБ), а через 2 часа время работы, я увидел следующее сообщение об ошибке:

«Ошибка 1114: таблица «mytable» заполнена ».

При возникновении этой ошибки, использование для хранения баз данных возвращается в нормальное состояние, но никаких изменений не было сделано, чтобы MYTABLE

Мои вопросы: - Что CloudSQL пытается сделать, когда я запускаю мою просьбу, и как придет ли он так долго? - Что я мог сделать, чтобы сделать мой запрос быстрее выполненным CloudSQL? Что мне не хватает?

ответ

0

От http://dev.mysql.com/doc/refman/5.7/en/alter-table.html

«Если вы используете„ALTER TABLE MyTable AUTO_INCREMENT = N“сервер MySQL создаст новую таблицу, скопировать все данные из старой таблицы в новую, удалить старую, а затем переименовать новый, даже если нет никаких структурных изменений в таблицу "

0

Я до сих пор не имеют ни малейшего представления относительно того, что случилось с этим запросом:.

ALTER TABLE mytable ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST 

Но эта альтернатива работала:

  • Создание таблицы копирования с теми же самыми полями, чем в MyTable плюс auto_increment
  • вставки каждая запись из первой таблицы в новую таблицу

Эта альтернатива фактически увеличилась меньше хранения, чем один Я использую в своем вопросе (который заканчивается неудачей)