#php #sql-server #pdo #bulkupdate
#php #sql-сервер #pdo #объемное обновление
Вопрос:
Я получаю XML-файл, содержащий обновленные сведения об инвентаризации, и мне нужно обработать xml для обновления базы данных.
В настоящее время процедура выглядит следующим образом:
$SQL = "EXEC sp__ReviseInventoryStatus :ItemID,:Quantity,:Price";
$rs= $DB->prepare($SQL,[PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
foreach($xml->Item as $T)
{
$rs->bindParam(':ItemID', $T->ItemID, PDO::PARAM_STR);
$rs->bindParam(':Quantity', $T->Quantity, PDO::PARAM_STR);
$rs->bindParam(':Price', $T->Price, PDO::PARAM_STR);
$rs->execute();
}
где sp_ReviseInventoryStatus является простым:
Update Items set Quantity=@Quantity, Price=@Price where ItemID=@ItemID
Я создал требуемый индекс в таблице для увеличения скорости, и, похоже, все работает хорошо.
Но поскольку обновляемые элементы часто превышают 150 КБ, а элементы в таблице Items — более 2 м … обычно для выполнения задания требуется более 30 минут..
Поэтому я ищу лучший способ выполнить эту задачу.
Может кто-нибудь подсказать путь?
Комментарии:
1. 12 мс / запись звучит разумно. Единственный способ, которым вы, вероятно, получите его быстрее, — это избежать повторной отправки набора данных за один вызов через: 1. параметр таблицы (который, я не думаю, что PDO может сделать) или 2. параметр XML (измельчение его и вставка извлеченных данных внутри хранимой процедуры).
2. Хм .. вы имеете в виду прямую передачу XML в DB и цикл в SP
3. Если ваш XML содержит только значения Quantity, Price и ItemId, то да. Но запишите это как операцию на основе набора, не используйте циклы или курсоры.