1 и 2. Учитывая, что SKU, как я понимаю, уникальное по смыслу значение, на нем висит UNIQUE индекс. Таким образом, можно читать csv-файл построчно и юзать
on duplicate key update. Это позволит всего одним циклом обновить атрибуты или добавить недостающие товары в таблицу.
3. Чтобы удалить продукты из базы Magento, SKU которых нет в CSV, надо блоками (по 100 строк, например) читать таблицу товаров в базе и проверять наличие этих SKU в csv-файле. Если не найдено, писать id в массив. После этого сделать удаление всех строк по этим idшникам с момощью sql-оператора IN. Если в массиве набралось очень много id-шников, есть смысл также разделить их на блоки, чтобы в IN не было очень много idшников. Это можно оптимизировать, если на шаге 1 и 2 в пхп-массив писать считанные из файла SKU (даже если там 100к строк, это не сильно много памяти отъест в данном случае) - тогда даже искать в csv-файле не надо будет, достаточно будет проверить просто наличие SKU, взятого из базы, в этом массиве.
P.s. насчет 3. Возможно, было бы еще эффективней в таблицу с товарами добавить столбец, в который на шаге 1 и 2 в том же sql-запросе писать (или переписывать старое значение) текущую дату и время для обработанных записей. После чего всего одним запросом к базе выпилить из таблицы все, что старое (потому что если записано старая дата и время, значит, в csv-файле товара с таким SKU не было, и его можно удалить).