Registros do Oracle SELECT TOP 10

Eu tenho um grande problema com uma instrução SQL no Oracle. Desejo selecionar os 10 melhores registros ordenados por STORAGE_DB que não estão em uma lista de outra instrução de seleção.

Este funciona bem para todos os registros:

SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY WHERE 
      STORAGE_GB IS NOT NULL AND 
        APP_ID NOT IN (SELECT APP_ID
                       FROM HISTORY
                        WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009') 

Mas quando estou adicionando

AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC

Estou recebendo algum tipo de registro "aleatório". Eu acho que porque o limite ocorre antes do pedido.

Alguém tem uma boa solução? O outro problema: Esta consulta é muito lenta (10k + registros)

questionAnswers(5)

yourAnswerToTheQuestion