Ten eerste, geen behoefte aan distinct . De vraag kan worden geschreven als:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Ten tweede zijn er (ten minste) nog twee manieren om het te schrijven. Ofwel met JOIN :
select t1.*
from example@sqldat.com t1
join example@sqldat.com t2
where t2.column2 = t1.column1
and t2.column3 > 0
group by
t1.id, t1.column1, ...
order by t1.column1
of (mijn voorkeur) met EXISTS :
select t1.*
from example@sqldat.com t1
where exists
( select *
from example@sqldat.com
where t2.column2 = t1.column1
and t2.column3 > 0
)
order by column1
In ieder geval moet u de uitvoeringsplannen voor al deze plannen controleren.
Ik zou verwachten dat de prestaties het beste zijn als je een index hebt op table1.column1 en voor table2 , ofwel een index op column2 of een samengestelde index op (column3, column2)