Я не уверен, что есть причина не упрощать запрос до этого:
select destName
from (
select distinct destName
from tblDestNames
where nextTime < :1 and nextTime >= :2 and destName is not null
)
where rownum <= 1000;
Однако это не решит проблему с производительностью. Проблема заключается в следующем:
where rownum <= 1000
Заменив rownum на 'rank' и 'over', вы получите что-то вроде:
select distinct destName
from (
select
destName
from
(select destName, rank()
over (order by destName desc ) rnk
from tblDestNames
where nextTime < :1 and nextTime >= :2 and destName is not null)
where rnk <= 1000;
)
Бонус в том, что с помощью «over» вы выбираете порядок результатов, которые будут отображаться, и тех, которые не будут отображаться.
РЕДАКТИРОВАТЬ: На самом деле его можно еще упростить до:
select
distinct destName
from
(select destName, rank()
over (order by destName desc ) rnk
from tblDestNames
where nextTime < :1 and nextTime >= :2 and destName is not null)
where rnk <= 1000;