Когда база крутилась на локалхосте, проблем залить прайс с 750 тысячами позиций проблем не было. Обошел построчно файл, выполнил 750 тысяч mysql_query("INSERT INTO..."), подождал минуты 3, все залилось... Сейчас перешел на исполование mysql-сервера на другом хостинге. Стало вместо 1500 запросов в секунду выполняться 30. Пробовал mysql_pconnect, mysqli_prepare - никакого эффекта не дает. Приходится сейчас заливать на локальный хостинг, затем делать дамп и загружать дамп на удаленный. Как оптимизировать такие операции? Получается, при каждом запросе на установку соединения с удаленным сервером теряется куча времени...
ну для начала нужно вспомнить что каждый инсерт-запрос может содержать несколько кортежей для вставки. и общая длина такого пакета просто не должна превысить установленный лимит на размер пакета. пконнект и препейр к делу воооооообще никакого отношения не имеют. и вдруг очевидно стало что ты не понимаешь зачем они вообще нужны. но не об этом сейчас. по поводу оптимизации - тут надо понимать что там вообще происходит. фильтруются ли повторяющиеся строки, как настроены индексы, как вообще написан сценарий импорта и так далее далее далее. и последнее - что значит ? у тебя получается перед каждым инсёртом идет новое установление соединения чтоль? ведь именно этот смысл эта фраза и имеет.
В этом другом хостинге есть shell доступ ? Если есть, то лучше Код (PHP): mysql -u root -p database < import.file.sql
Я не вникал в технические тонкости. Я лишь понимаю, что если выполнять эту серию запросов локально (независимо от сервера), то это будет быстро. Если выполнять пехапе на одном сервере, а базу держать на другом - будет ооочень медленно. А чем это объясняется - в этом и вопрос. Но собирать их самостоятельно, высчитывая еще попадание в лимит - не колхозно ли... это как раз неважно. нужно тупо вогнать в базу ровно допустим миллион строк, неважно, каких и что там повторяется. Потому что задача в любом случае значительно не упрощается. Вы предлагаете позволить менеджеру загружать прайс через шелл? Тем более, каким-то макаром сформированный в sql-инструкции. Или сначала из CSV, в котором он загружает через форму на сайте, делать на этом же сайте sql, копировать файл на удаленный сервер и там же выполнять шелл?
а, ну в таком случае единственно чем это объясняется - среда передачи данных. локальный сервер работает через юникс-сокет или через лупбэк-девайс что очень быстро, а удаленный сервер - со скоростью доступа к этому серверу в лучшем случае. еще может быть дополнительный шепер на соединение, на тип сервиса, просто загружен канал торрентами (даже если соседа). плюс может быть трафик шифруется. и так далее. в общем медленно. даже если одно соединение устанавливается - обмен-то данными всё равно в медленной среде будет. как вариант - загружать на хост, там разбирать и вставлять в локальную для него субд.
я дебил. базу перенес, а к базе еще отдельно админку (без перетаскивания всего сайта) перенести не додумался... спасибо =)