Как быстро добавить в таблицу больше миллиона записей? - MySQL

Узнай цену своей работы

Формулировка задачи:

Чтобы посмотреть как будет вести себя БД в зависимости от количества записей, хочу добавить записи в таблицу для теста. Как быстро добавить в таблицу больше миллиона записей?

Решение задачи: «Как быстро добавить в таблицу больше миллиона записей?»

textual
Листинг программы
  1. DROP TABLE IF EXISTS pivot;
  2. DROP TABLE IF EXISTS big_table;
  3. DROP TABLE IF EXISTS attributes;
  4. *
  5. CREATE TABLE pivot
  6.                   (
  7.                    ROW_NUMBER INT(4) UNSIGNED AUTO_INCREMENT,
  8.                    PRIMARY KEY pk_pivot (ROW_NUMBER)
  9.                    )
  10. engine = innodb;
  11. *
  12. INSERT INTO pivot(ROW_NUMBER)
  13.    SELECT NULL
  14.     FROM
  15.             information_schema.global_status g1,
  16.             information_schema.global_status g2
  17.    LIMIT 500;
  18. *
  19. CREATE TABLE attributes(
  20.                         attr_id          INT(10) UNSIGNED AUTO_INCREMENT,
  21.                         attribute_name   VARCHAR(32) NOT NULL,
  22.                         start_date       datetime,
  23.                         end_date         datetime,
  24.  CONSTRAINT pk_attributes PRIMARY KEY(attr_id)
  25.                        )
  26. engine = innodb;
  27. *
  28. CREATE TABLE big_table(
  29.                        btbl_id        INT(10) UNSIGNED AUTO_INCREMENT,
  30.                        attr_attr_id   INT(10) UNSIGNED,
  31.                        record_date    datetime,
  32.                        record_value   VARCHAR(128) NOT NULL,
  33. CONSTRAINT pk_big_table PRIMARY KEY(btbl_id)
  34.                       )
  35. engine = innodb;
  36. *
  37. INSERT INTO attributes(
  38.                        attribute_name,
  39.                        start_date,
  40.                        end_date
  41.                        )
  42.        SELECT ROW_NUMBER,
  43.                        str_to_date("20000101", "%Y%m%d"),
  44.                        str_to_date("20000201", "%Y%m%d")
  45.        FROM pivot;
  46. *
  47. INSERT INTO big_table(
  48.                        attr_attr_id,
  49.                        record_date,
  50.                        record_value)
  51.   SELECT p1.ROW_NUMBER,
  52.          date_add(str_to_date("20000101", "%Y%m%d"),
  53.          INTERVAL p2.ROW_NUMBER + p3.ROW_NUMBER DAY),
  54.          p2.ROW_NUMBER * 1000 + p3.ROW_NUMBER
  55.     FROM
  56.          pivot p1,
  57.          pivot p2,
  58.          pivot p3;
  59. *
  60. CREATE INDEX
  61.          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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы