Делайте уникальный ключ по (upc, sku). Затем
INSERT INTO `product` (`upc`, `sku`, `price`, `price_retail`)
VALUES (:upc1, :sku1, :price1, :price_retail1), ...,
(:upcN, :skuN, :priceN, :price_retailN)
ON DUPLICATE KEY UPDATE `price` = VALUES(`price`),
`price_retail` = VALUES(`price_retail`)
Только следите за длиной строки запроса, переменная
max_allowed_packet
Ещё вариант - использовать подготовленный запрос. Один раз перед циклом делается prepare и bind, затем на каждом шаге execute. Экономия идёт на компиляции запроса.