Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Listar sin saturar la conexion

Estas en el tema de Listar sin saturar la conexion en el foro de SQL Server en Foros del Web. Hola tengo una tabla clientes con cerca de 300.000 mil registros, pero al momento de realizar mi consulta desde jsp se me satura la pagina ...
  #1 (permalink)  
Antiguo 01/12/2011, 18:32
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Listar sin saturar la conexion

Hola tengo una tabla clientes con cerca de 300.000 mil registros, pero al momento de realizar mi consulta desde jsp se me satura la pagina y no es capaz de listarme más de 1500 datos.

¿Como podria mejorar mi consulta sql para que pueda listarme más de 1500 registros sin saturar mi conexion que realizo desde java a sqlserver?
Gracias

El problema lo consigo cuando busco un cliente por nombre, ya que mi consulta puede arrojarme muchas coincidencias, por ejemplo si busco por el nombre maria me devuelve aproximadamente 4000 personas
alguna idea
  #2 (permalink)  
Antiguo 02/12/2011, 08:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Listar sin saturar la conexion

y porque no paginas tus resultados? si te regresa 4000 nada mas muestra paginas por series de 100 en 100 registros :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/12/2011, 09:26
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Listar sin saturar la conexion

Pero si hago con el datable la paginacion, pero al momento de sobrepasar los 1500 registro se me satura la conexion.

Como podria mejorar la conexion jdbc y un procedimiento almacenado? me refiero que si llega a 1500 registros, los pagine y enseguida espere algunos segundos y despues siga listando los demàs datoshasta llegar al tope que pueden ser 3000 o 4000....
hay alguna forma de hacer eso... yo habia pensado con waitFor delay, pero no se si pueda ser util en este caso
  #4 (permalink)  
Antiguo 02/12/2011, 13:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Listar sin saturar la conexion

y porque tienes que tener en memoria los 5000, porque no consultas el total de registros, y nada mas presentas los primeros 100 en tu grid, ya si quieren consultar los demas presentas los que sigues y asi, no tienes porque cargar tu datagrid con toooodos los datos...

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 02/12/2011, 20:32
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Listar sin saturar la conexion

Tiene ventajas paginar en la aplicación, ya que haces una única consulta a la base de datos y además, si las clases como datatable, recordset, etc lo permiten, las páginas se pueden definir con solo configurar una propiedad, pero todo tiene un costo, como comentas, problemas para gestionar grandes cantidades de registros, o leer el total de los registros sin necesidad en caso de que la información buscada por el usuario se encuentre en las primeras páginas.

La alternativa es paginar dentro de la base de datos, tendrás que ejecutar una consulta por cada página pero es más eficiente porque se gestionan cantidades pequeñas de registros y no lees registros innecesarios una vez que el usuario encuentra la información que busca.

Código:
with clientes as (
 select 
  row_number() over (order by id_cliente) as page,
  id_cliente,
  nombre
 from tu_tabla
)
select id_cliente, nombre
from clientes
where nombre like '%un_nombre%'
and page between 1 and 100
En este caso, ejecutas la consulta por cada página, la cantidad de registros por página es la diferencia entre los valores del between que debes incrementar para obtener los registros de la página siguiente (por ejemplo: page between 1 and 100, page between 100 and 200, etc).

En general, paginar en la aplicación es favorable cuando se trata con pocos registros, o cuando los registros tienden a ser estáticos y los guardas en cache para mejorar el rendimiento, en caso contrario, lo mejor es paginar en base de datos.

Saludos

Etiquetas: conexion, registros, server, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:32.