Първо, няма нужда от distinct . Заявката може да бъде написана като:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Второ, има (поне) още два начина да го напишете. Или с 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
или (мое предпочитание) с 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
Във всеки случай трябва да проверите плановете за изпълнение за всички тях.
Очаквам производителността да бъде най-добра, ако имате индекс на table1.column1 и за table2 , или индекс на column2 или съставен индекс на (column3, column2)