I know this query will work to find the first N highest salaries:

select * from employee
where salary in
(select salary
from employee
order by salary desc)
where rownum <= 5

But this simply goes for a toss with a table having more than a million records and say if I want to see the first 1000 highest salaries. I mean the query becomes very very slow. Obviously, because it has to do a full table scan to first sort them in descending order. Even having indexes has not helped.

Can you please let me know how to fine tune this query to speed up the process?

Many thanks