Erstens ist distinct
nicht erforderlich . Die Abfrage kann wie folgt geschrieben werden:
select *
from [email protected]
where column1 in (
select column2
from [email protected]
where column3 > 0
)
order by column1
Zweitens gibt es (mindestens) zwei weitere Möglichkeiten, es zu schreiben. Entweder mit JOIN
:
select t1.*
from [email protected] t1
join [email protected] t2
where t2.column2 = t1.column1
and t2.column3 > 0
group by
t1.id, t1.column1, ...
order by t1.column1
oder (meine Präferenz) mit EXISTS
:
select t1.*
from [email protected] t1
where exists
( select *
from [email protected]
where t2.column2 = t1.column1
and t2.column3 > 0
)
order by column1
In jedem Fall sollten Sie die Ausführungspläne für alle überprüfen.
Ich würde erwarten, dass die Leistung am besten ist, wenn Sie einen Index für table1.column1
haben und für table2
, entweder ein Index auf column2
oder ein zusammengesetzter Index auf (column3, column2)