For det første er der ikke behov for distinct . Forespørgslen kan skrives som:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
For det andet er der (mindst) to måder mere at skrive det på. Enten med 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
eller (min præference) med 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
Under alle omstændigheder bør du tjekke udførelsesplanerne for dem alle.
Jeg forventer, at ydeevnen er bedst, hvis du har et indeks på table1.column1 og for table2 , enten et indeks på column2 eller et sammensat indeks på (column3, column2)