Perl DBD :: mysql 'mysql_use_result' OK для использования при вставке в другую таблицу? - PullRequest
1 голос
/ 01 сентября 2011

Я выполняю большое объединение в mysql, а затем воздействую на полученные данные и записываю их в другую таблицу.Прямо сейчас я использую mysql_store_result по умолчанию, но $ sth-> execute () после выполнения запроса занимает около 20 минут.Я хочу переключиться на mysql_use_result, так как я действую только по одной строке за раз.

Но эта часть документации меня беспокоит:

Этот атрибут заставляетдрайвер использует mysql_use_result вместо mysql_store_result.Первый быстрее и менее потребляет память, но имеет тенденцию блокировать другие процессы.(Вот почему mysql_store_result используется по умолчанию.)

Я действую по одной строке за раз, а затем сохраняю результат в массиве.Каждые 500 записей я делаю ВСТАВКУ в отдельную таблицу.Будет ли это нормально делать из цикла mysql_use_result?Будет ли это нормально, если я определю новый обработчик БД для INSERT?

1 Ответ

1 голос
/ 01 сентября 2011

Вы должны использовать отдельное соединение с БД для выполнения вставок.

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

Документация mysql немного понятнее:

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

(Я считаю, что это преувеличение, и, возможно, оно было отозвано, когда mysql был гораздо больше игрушечной реализацией SQL.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...