обновление против вставки - PullRequest
0 голосов
/ 20 марта 2012

Мы используем innodb и у нас есть таблица, в которой будет много миллионов строк. Один из столбцов будет varchar(32), значение которого будет меняться довольно часто. Обновление этого varchar на десятках тысяч строк займет много времени, поэтому мы пытаемся с идеей разбить это поле на собственную таблицу, а затем вместо обновления мы можем удалить, а затем Пакетная вставка с использованием данных загрузки в файл.
Похоже, это значительно улучшит производительность. Я что-то упустил, хотя?
Есть ли более простой способ улучшить производительность обновления? Кто-нибудь делал что-то подобное раньше?

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Вы можете создать индекс, соответствующий предложению where вашего оператора обновления.

Идея его разделения может повысить производительность (я не уверен), но только тогда, когда все значения изменяются одновременно,Когда изменяются отдельные значения, этот подход медленнее, чем подход с одной таблицей.

Еще одним предварительным условием для ускорения является то, что вы должны заранее знать отображение ключа-> значения второй таблицы.Если вам нужно заглянуть в первую таблицу, чтобы решить, как хранить значения во второй, вы также медленнее, чем с одной таблицей.

0 голосов
/ 20 марта 2012

Если вы можете выбрать строки, которые вы хотите обновить, основываясь только на индессе, это на практике должно делать то же самое, что и ваши предложения (и при этом сохранять правильную организацию данных, поэтому предпочтительнее). Тихо, возможно, это даже быстрее, чем делать это самостоятельно.

...