Вы не смотрели на
13.2.5.2 INSERT ... ON DUPLICATE KEY UPDATE Syntax ?
Можно вставлять записи и на конфликте вставки будет делаться UPDATE. Для 50k записей вычислять те, которых нет без предварительной загрузки их БД, как мне известно - не самый быстрый вариант.
Еще вариант, - можно, залить из в буферную (отдельная таблица для входящих данный, каждая пачка которой характеризуется уникальным идентификатором) или временную таблицу и потом обработать их уже на уровне БД, хранимыми процедурами или просто запросами, но вряд ли будет меньше операций, чем в первом случае.
UPD. Забыл написать - можно вставлять пачками, подобным образом:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);