C'è un modo per evitare l'uso di NOT IN magari usando un qualche tipo di JOIN al suo posto?

adesso ho una query del tipo:

select X
from Y
where ... and X NOT IN (select X from Y where... group by... having ...)

Solo che ci mette davvero troppo tempo (ordine di minuti), anche dopo aver creato un indice su X (che tra l'altro è anche chiave esterna e in teoria ce l'aveva già?)

Una versione simile della query (che pero' mi dava un set piu' generico e non adava bene) usando solo JOIN ci metteva ordine di decimi di secondi, quindi non posso accettare che ci metta cosi' tanto...