Как быстро обновить много строк (1 500 000) - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть таблица с 1,5 мил строк и у меня есть 47k значений для обновления.Я попробовал два способа сделать это, и оба довольно медленные.

Первый - 47 000 строк

UPDATE $table SET name='$name' WHERE id='$id'

, второй -

$prefix = "UPDATE table
    SET name = (case ";
while () {
    $mid .=  "when id = '$id' then '$name' ";   
}
$sufix = "end);";

$query = $prefix . $mid . $sufix;

Есть ли способ сделать это быстрее?Может быть с LOAD DATA INFILE?Не могу понять синтаксис ОБНОВЛЕНИЯ с этим.

1 Ответ

0 голосов
/ 24 ноября 2018

Мне приходилось ежедневно импортировать большие файлы, и я пробовал все виды вещей.

В итоге я получил лучшую производительность при определенной комбинации:

  1. Первыйскопируйте CSV на сервер базы данных и загрузите его с локального диска вместо загрузки CSV с клиентского компьютера.
  2. Убедитесь, что у вас есть структура таблицы, которая точно соответствует этому.Я использовал временную таблицу для импорта, а затем использовал отдельные запросы для получения данных в финальную таблицу.
  3. Нет внешних ключей и уникальных проверок индекса в таблице tmp.
  4. Это уже сильно ускоряет ход событий.Если вам нужно увеличить производительность, вы можете увеличить размер буфера журнала.

И, очевидно:

  • убедитесь, что вы не импортируете то, что вам нужноне надо.Будьте критичны в отношении того, какие поля вы включаете, и какие строки.
  • Если у вас есть только несколько разных значений текста в столбце, используйте вместо него числовое значение.
  • Вам действительно нужно 8 десятичных знаков в ваших числах?
  • Вы постоянно импортируете одни и те же данные, куда вы можете вставлять только обновления?
  • Убедитесь, что вы этого не делаетевызвать ненужные преобразования типов во время импорта.Подготовьте данные как можно ближе к таблице, в которую вы импортируете.
...