2012-06-25 10 views
5

Vorrei sapere quale dei sotto esegue migliore in termini di tempo per eseguire query con 100K + recordMyBatis RowBounds vs Oracle query di impaginazione utilizzando rownum e subquery nidificato

1) di Oracle Impaginazione

SELECT * 
FROM (
    SELECT id, col1, col2, rownum rn 
    FROM (
     SELECT /*+ first_rows(50) */ id, col1, col2 
     FROM table1 
     ORDER BY id DESC 
    ) 
    WHERE rownum <= 50 
) 
WHERE rn >= 20; 

2) Impaginazione utilizzando MyBatis RowBounds.

MyBatis RowBounds utilizza il normale JDBC e dopo aver attivato la selezione salta i primi 20 record e quindi recupera i successivi 30 (pagine).

Inoltre, l'approccio di MyBatis diventerà più lento man mano che il numero di pagine aumenta man mano che vengono saltate più righe?

risposta

1

In generale, il driver JDBC dovrebbe recuperare le prime 20 righe attraverso la rete in modo tale che generalmente sarà meno efficiente rispetto alla scrittura di una query di impaginazione. Quella penalità diventerà più grande mentre recuperi più pagine.

Entrambi gli approcci, in generale, diventano più lenti quando si recuperano le pagine successive. Ma di solito non è un problema, se si stanno pagando i risultati, ciò implica che gli utenti non recupereranno più di un paio di pagine di risultati prima di rinunciare.

Problemi correlati