Как в цикле производить select и/или insert запросы к базе (цикл примерно 50к итераций)?

Необходимо в цикле производить select и/или insert запросы к базе, цикл примерно 50к итераций, интересует вопрос на сколько высока будет нагрузка на базу и будет ли вообще?
Вообще уйти от цикла не получится, потому что все же некоторые значения придется insert'ить.
База - MySql 5, обращаться планируется всего к 2 таблицам типа myisam.
  • Вопрос задан
  • 4621 просмотр
Решения вопроса 1
надо собирать запросы

$sql = 'insert `table` ( `param1`, `param2` ) value ';
foreach ( .... as $data ) {

$sql .= '( "value1", "value2" ),';
}

$sql = rtrim( $sql, ',' );


примерно так.
возможно не все 50000 в один запрос, а например по 1000/10000. потестируйте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
mobi
@mobi
Копите данные и вставляйте их одним запросом (можно обрамить в ALTER TABLE DISABLE KEYS / ENABLE KEYS). Это же касается и SELECT - если есть возможность, сгруппируйте запросы там, где это возможно, и разбирайте потом результат "вручную".
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Что-то в инфраструктуре из двух баз и прослойки надо исправлять, как мне кажется.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Может делать так? Тут после роллбэка еще раз делаем запрос тот же, и так или по кругу пока не вставится, или писать свою обработку ексепшна.
А данные да, надо пачками формировать, штук по 500 нормально, при хорошем сервере это пару сек даже с 1000к записей, если разделить слипами - вообще думаю никто не заметит особых тормозов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы