Если вы хотите один запрос, вы можете использовать случай, когда (или if) для производительности
update userdata
set maindate = case when id = :id2 then 1
else 0 end
where cid = :id;
Убедитесь, что у вас есть правильный индекс для столбцов пользовательских данных (cid, id)
и количество сканированных строк должно быть одинаковым для первого вейрия .. но таким образом вы избегаете второго ..
в конце концов попытайтесь создать составной индекс
create index myidx1 on userdata(cid, id)