Документы MySQL говорят:
Размер таблицы замедляет вставку индексов по логарифму N, предполагая индексы B-дерева.
Означает ли это, что для вставки каждой новой строки скорость вставки будет замедляться в лог файле N, где N, я предполагаю, что это число строк? даже если я вставляю все строки только в одном запросе? то есть:
INSERT INTO mytable VALUES (1,1,1), (2,2,2), (3,3,3), .... ,(n,n,n)
Где n ~ 70 000
В настоящее время я имею ~ 1.47 миллиона строк в таблице со следующей структурой:
CREATE TABLE mytable (
`id` INT,
`value` MEDIUMINT(5),
`date` DATE,
PRIMARY_KEY(`id`,`date`)
) ENGINE = InnoDB
Когда я вставляю вышеуказанный способ в транзакцию, время фиксации составляет ~ 275 секунд. Как я могу это оптимизировать, так как новые данные должны быть добавлены каждый день, а время вставки просто будет замедляться.
Кроме того, есть ли что-нибудь помимо запросов, которые могут помочь? возможно, некоторые настройки конфигурации?
Возможный метод 1 - Удаление индексов
Я читал, что удаление индексов непосредственно перед вставкой может помочь вставить скорость. А после вставок я добавляю индекс снова. Но здесь единственным индексом является первичный ключ, и падение его на мой взгляд не поможет. Кроме того, в то время как первичный ключ отбрасывается, все выбранные запросы будут калечить медленно.
Я не знаю никаких других возможных методов.
Изменить: Вот несколько тестов по вставке ~ 60 000 строк в таблицу с ~ 1.47 мил строк:
Использование простого запроса, описанного выше: 146 секунд
Использование MySQL LOAD DATA infile: 145 секунд
Используя MySQL LOAD DATA, infile и splitting файлы csv, как было предложено Дэвидом Джаши в его ответе: 136 секунд для 60 файлов с 1000 строк каждый, 136 секунд для 6 файлов с 10 000 строк каждый
Удаление и повторное добавление первичного ключа: удаление ключа заняло 11 секунд, 0,8 секунды для вставки данных, но 153 секунды для повторного добавления первичного ключа, всего за 165 секунд