Как быстро добавить в таблицу больше миллиона записей? - MySQL
Формулировка задачи:
Чтобы посмотреть как будет вести себя БД в зависимости от количества записей, хочу добавить записи в таблицу для теста.
Как быстро добавить в таблицу больше миллиона записей?
Решение задачи: «Как быстро добавить в таблицу больше миллиона записей?»
textual
Листинг программы
- DROP TABLE IF EXISTS pivot;
- DROP TABLE IF EXISTS big_table;
- DROP TABLE IF EXISTS attributes;
- *
- CREATE TABLE pivot
- (
- ROW_NUMBER INT(4) UNSIGNED AUTO_INCREMENT,
- PRIMARY KEY pk_pivot (ROW_NUMBER)
- )
- engine = innodb;
- *
- INSERT INTO pivot(ROW_NUMBER)
- SELECT NULL
- FROM
- information_schema.global_status g1,
- information_schema.global_status g2
- LIMIT 500;
- *
- CREATE TABLE attributes(
- attr_id INT(10) UNSIGNED AUTO_INCREMENT,
- attribute_name VARCHAR(32) NOT NULL,
- start_date datetime,
- end_date datetime,
- CONSTRAINT pk_attributes PRIMARY KEY(attr_id)
- )
- engine = innodb;
- *
- CREATE TABLE big_table(
- btbl_id INT(10) UNSIGNED AUTO_INCREMENT,
- attr_attr_id INT(10) UNSIGNED,
- record_date datetime,
- record_value VARCHAR(128) NOT NULL,
- CONSTRAINT pk_big_table PRIMARY KEY(btbl_id)
- )
- engine = innodb;
- *
- INSERT INTO attributes(
- attribute_name,
- start_date,
- end_date
- )
- SELECT ROW_NUMBER,
- str_to_date("20000101", "%Y%m%d"),
- str_to_date("20000201", "%Y%m%d")
- FROM pivot;
- *
- INSERT INTO big_table(
- attr_attr_id,
- record_date,
- record_value)
- SELECT p1.ROW_NUMBER,
- date_add(str_to_date("20000101", "%Y%m%d"),
- INTERVAL p2.ROW_NUMBER + p3.ROW_NUMBER DAY),
- p2.ROW_NUMBER * 1000 + p3.ROW_NUMBER
- FROM
- pivot p1,
- pivot p2,
- pivot p3;
- *
- CREATE INDEX
- idx_big_table_attr_date ON big_table(attr_attr_id, record_date);
Объяснение кода листинга программы
- DROP TABLE IF EXISTS pivot;
Удаление таблицы
pivot
при наличии в ней данных может привести к потере информации. Поэтому перед выполнением этой команды необходимо убедиться, что в таблице нет данных. - DROP TABLE IF EXISTS big_table;
Аналогично, перед выполнением этой команды необходимо убедиться, что в таблице
big_table
нет данных. - DROP TABLE IF EXISTS attributes;
Перед выполнением этой команды также необходимо убедиться, что в таблице
attributes
нет данных. - CREATE TABLE pivot
Создание таблицы
pivot
с полями ROW_NUMBER, PRIMARY KEY pk_pivot (ROW_NUMBER). - INSERT INTO pivot(ROW_NUMBER)
Вставка в таблицу
pivot
значений NULL в поле ROW_NUMBER с использованием оператора SELECT NULL FROM information_schema.global_status g1, information_schema.global_status g2 LIMIT 500. - CREATE TABLE attributes
Создание таблицы
attributes
с полями attr_id, attribute_name, start_date, end_date, PRIMARY KEY(attr_id). - CREATE TABLE big_table
Создание таблицы
big_table
с полями btbl_id, attr_attr_id, record_date, record_value, PRIMARY KEY(btbl_id). - INSERT INTO attributes(attribute_name, start_date, end_date)
Вставка в таблицу
attributes
значений ROW_NUMBER, str_to_date(20000101
,%Y%m%d
), str_to_date(20000201
,%Y%m%d
) соответственно. - INSERT INTO big_table(attr_attr_id, record_date, record_value)
Вставка в таблицу
big_table
значений ROW_NUMBER, date_add(str_to_date(20000101
,%Y%m%d
), INTERVAL ROW_NUMBER + ROW_NUMBER DAY), ROW_NUMBER * 1000 + ROW_NUMBER. - CREATE INDEX idx_big_table_attr_date ON big_table(attr_attr_id, record_date);
Создание индекса idx_big_table_attr_date на поля attr_attr_id и record_date таблицы
big_table
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д