Po pierwsze, nie ma potrzeby stosowania distinct . Zapytanie można zapisać jako:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Po drugie, są jeszcze (co najmniej) dwa sposoby na napisanie tego. Albo z 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
lub (moje preferencje) z 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
W każdym razie powinieneś sprawdzić plany wykonania dla nich wszystkich.
Spodziewam się, że wydajność będzie najlepsza, jeśli masz indeks na table1.column1 i dla table2 , albo indeks w column2 lub indeks złożony na (column3, column2)