Za prvé, není třeba distinct . Dotaz lze napsat jako:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Za druhé, existují (alespoň) další dva způsoby, jak to napsat. Buď pomocí 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
nebo (moje preference) s 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
V každém případě byste měli zkontrolovat prováděcí plány pro všechny z nich.
Očekával bych, že výkon bude nejlepší, pokud budete mít index na table1.column1 a pro table2 , buď index na column2 nebo složený index na (column3, column2)