Как добавить поле auto_increment в таблицу с огромными данными? - PullRequest
0 голосов
/ 09 марта 2020

Допустим, есть таблица table_test, и в ней около 10 миллионов строк данных. И я хочу добавить поле auto_increment, например key, чтобы выполнить работу по нумерации страниц. Каков наилучший способ заставить его работать?

структура таблицы, как показано ниже:

# table_test

+---------------------------------------+--------------+------+-----+---------+-------+
| Field                                 | Type         | Null | Key | Default | Extra |
+---------------------------------------+--------------+------+-----+---------+-------+
| ad_id                                 | int(64)      | NO   | PRI | NULL    |       |
| account_id                            | varchar(64)  | YES  | MUL | NULL    |       |
| country                               | varchar(64)  | NO   | PRI | NULL    |       |
| image_hash                            | varchar(64)  | YES  |     | NULL    |       |
+---------------------------------------+--------------+------+-----+---------+-------+



| table_test | CREATE TABLE `table_test` (
  `ad_id` int(11) NOT NULL,
  `account_id` varchar(64) DEFAULT NULL,
  `country` varchar(64) NOT NULL,
  `image_hash` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`,`country`),
  KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |

обновление:

изменить id на ad_id, а ad_id - это уникальный ключ с полем country, поэтому сам ad_id может дублироваться.

Ответы [ 3 ]

2 голосов
/ 09 марта 2020

Я бы go:

-- drop PK as AUTO increment demands being the PK
ALTER TABLE table_test DROP PRIMARY KEY;
-- add Id as PK and the first column
ALTER TABLE table_test ADD Id INT AUTO_INCREMENT PRIMARY KEY FIRST;
-- make sure the old PK is unique
ALTER TABLE table_test ADD CONSTRAINT table_test_uk UNIQUE (ad_id, country);

или, возможно:

CREATE TABLE table_test2 LIKE table_test;
ALTER TABLE table_test2 DROP PRIMARY KEY;
-- add Id as PK and the first column
ALTER TABLE table_test2 ADD Id INT AUTO_INCREMENT PRIMARY KEY FIRST;
-- make sure the old PK is unique
ALTER TABLE table_test2 ADD CONSTRAINT table_test2_uk UNIQUE (ad_id, country);
INSERT INTO table_test2(ad_id, account_id, country, image_hash)
SELECT ad_id, account_id, country, image_hash FROM table_test;
DROP TABLE table_test;
RENAME TABLE table_test2 TO table_test;
0 голосов
/ 09 марта 2020

Вы уже можете использовать столбец 'id' в качестве автоматического приращения (если вы не используете UUID или какую-либо другую стратегию).

Вы можете проверить следующий ответ о том, как изменить таблицу для добавления автоматического приращения к таблице: Таблица ALTER - добавление AUTOINCREMENT в MySQL

Редактировать: Если вы хотите sh добавить новый столбец, который будет автоматически увеличен, вы можете использовать следующее: ALTER TABLE table_test ADD id INT AUTO_INCREMENT;

0 голосов
/ 09 марта 2020

Просто измените свой стол

ALTER TABLE table_test CHANGE id id INT(11) NOT NULL AUTO_INCREMENT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...