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

Объяснение кода листинга программы

  1. DROP TABLE IF EXISTS pivot; Удаление таблицы pivot при наличии в ней данных может привести к потере информации. Поэтому перед выполнением этой команды необходимо убедиться, что в таблице нет данных.
  2. DROP TABLE IF EXISTS big_table; Аналогично, перед выполнением этой команды необходимо убедиться, что в таблице big_table нет данных.
  3. DROP TABLE IF EXISTS attributes; Перед выполнением этой команды также необходимо убедиться, что в таблице attributes нет данных.
  4. CREATE TABLE pivot Создание таблицы pivot с полями ROW_NUMBER, PRIMARY KEY pk_pivot (ROW_NUMBER).
  5. INSERT INTO pivot(ROW_NUMBER) Вставка в таблицу pivot значений NULL в поле ROW_NUMBER с использованием оператора SELECT NULL FROM information_schema.global_status g1, information_schema.global_status g2 LIMIT 500.
  6. CREATE TABLE attributes Создание таблицы attributes с полями attr_id, attribute_name, start_date, end_date, PRIMARY KEY(attr_id).
  7. CREATE TABLE big_table Создание таблицы big_table с полями btbl_id, attr_attr_id, record_date, record_value, PRIMARY KEY(btbl_id).
  8. 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) соответственно.
  9. 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.
  10. 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы