2012-04-10 14 views
11

Tengo un cursor devuelto desde la base de datos se ejecuta en 31 ms (milisegundos).ResultSet - Cursor: rs.next() Tomando mucho tiempo

Pero cuando se utiliza este cursor que tiene más de 1500 filas para las filas de ir a buscar

ResultSet rs = (ResultSet)cstm.getObject(6); 

    while(rs.next()){ 
    system.out.println("..."); 
    } 

Transversing Sólo sencilla a través de cada fila de cursor que está tomando más de 40 segundos (40000 ms)

¿Qué puede ser ¿hecho?

Respuesta

16

De hecho, por defecto JDBC utilizar un tamaño de 10. fetch Por lo tanto, si no se establece en un valor mayor, se llama a la base de datos para los próximos registros exactamente 150 veces ...

Todo lo que tiene que hacer es para probar el rendimiento mediante el establecimiento de fetchSize a 100 .. por ejemplo:

statement.setFetchSize(100); 

Se puede jugar con este número para mejorar el rendimiento de acuerdo a su Environnement.

+0

Gracias funcionó .. En cambio, utilicé ResultSet.setFetchSize (100) ... – faraz

+0

Genial :) 100 debería ser bueno sí – Mik378

+0

Gracias Mik378, hiciste mi día ... !!! –

4

que tienen más de 1500 filas en su cursor y los rs lo que es devuelto por la base de datos es sólo una referencia a ese cursor. Por lo tanto, cuando invoca rs.next(), cada vez va al registro de base de datos y obtiene el registro actual apuntado por el puntero del cursor.

Así que, obviamente, tomará algún tiempo ir a la base de datos todo el tiempo y buscar un solo registro por más de 1500 veces con cada iteración de bucle while.

+0

Buena explicación. – Deepak

Cuestiones relacionadas