2012-06-25 18 views
5

Quiero saber cuál de los de abajo tiene un mejor rendimiento en términos de tiempo para ejecutar la consulta con 100k + registrosMyBatis RowBounds vs Oracle consulta de paginación utilizando rownum y subconsulta anidada

1) de Oracle paginación

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) Paginación usando MyBatis RowBounds.

MyBatis RowBounds usa JDBC normal y después de disparar el seleccionar, omite los primeros 20 registros y luego obtiene los siguientes 30 (tamaño de página).

Además, ¿el enfoque MyBatis será más lento a medida que aumente el número de página a medida que se salten más filas?

Respuesta

1

En general, el controlador JDBC tendría que buscar las primeras 20 filas en la red, por lo que generalmente será menos eficiente que escribir una consulta de paginación. Esa penalización aumentará a medida que consigues más páginas.

Ambos enfoques, en general, se vuelven más lentos a medida que se buscan las páginas siguientes. Pero eso normalmente no es un problema. Si está buscando resultados, eso implica que los usuarios no obtendrán más de un par de páginas de resultados antes de darse por vencidos.

Cuestiones relacionadas