On va supposer que les id en question ne peuvent pas être à NULL.
Suivant le cas, une simple réécriture comme ceci peut éventuellement résoudre le pb de performance:
delete from "point" p where not exists (select id from gridmeasure where id=p.grid)
Il se peut que ça génère un plan d'éxécution à base d'anti-join, qui sera certainement plus efficace que l'autre, si gridmeasure est une table beaucoup plus petite que point.
A tester.
Sinon il y a aussi une autre version possible avec un LEFT JOIN en sous-requête pour sortir les IDs qui sont dans une table et pas dans l'autre. Ca peut aussi donner un plan plus efficace suivant la situation.
Mais en règle générale, il faudrait poster le résultat d'EXPLAIN de la requête pour avoir des conseils plus éclairés.
Partager