Как быстро добавить в таблицу больше миллиона записей? - 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.