Добрый день, ув. профи. Подскажи пожалуйста, как оптимизировать запрос на обновление данных. В базе 22000 записей. Обновляется от 6000 до 8000.
Сейчас имеем:
$sql = "UPDATE catalog_tmp SET id = '".$key['id']."' WHERE o_mark = '".addslashes($key['model'])."';";
Какой тип поля имеет o_mark? и какова его длинна если это текстовое поле? Если запрос занимает более нескольких секунд - скорее всего не настроен индекс по этому полю.
Таблица с менее 1 000 000 записей в принципе не является большой, в данном случае очевидно есть проблема с настройкой.
Посмотрите не избыточна ли длинна поля, если поле помещается в 30 символов - ставьте 30, не надо делать "с большим запасом" индексные поля. Это нагружает выборку и раздувает индекс.
Ну и собсно создайте индекс на поле.
skyfly2010: вообще то в этом нет проблемы, бд нормально переносят такое количество апдейтов за раз. Собсно это их функция - хранить и обрабатывать массивы данных, по другому реализовать 8000 апдейтов у вас все равно не выйдет, если конечно у вас не 1 id на все o_mark поля, в этом случае вам подойдет конструкция с in ( ). Но я так понимаю что у вас для каждого o_mark вставляется свой id?