Du skulle behöva tillhandahålla förklarande planer för att bättre kunna bedöma varför den ena presterar bättre än den andra. Men generellt sett kan du få bättre, eller åtminstone mer förutsägbara resultat för den här typen av sökning genom att ändra IN
villkor till en EXISTS
skick istället:
select *
from data_table t1
where exists (select null
from id_table t2
where t2.oid = t1.oid
and (other conditions))