Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: WHK en 15 Julio 2013, 16:41 pm



Título: Problema paginador en Sql Server 2005
Publicado por: WHK en 15 Julio 2013, 16:41 pm
Hola, por razones alienigenas no puedo utilizar sql server 2012 por lo tanto crear un paginador de datos en sql server 2005 es todo un rompecabezas ya que no existe la función limit ni offset.

La idea es la siguiente: Tengo 5 mil millones de registros en una sola tabla, ahora necesito crear una pagina web que me vaya mostrando los datos de 10 en 10 con un botón para ir mostrando siguiente, siguiente, siguiente etc.

El inconveniente es que en sql server solo puedes utilizar la función top() la cual obtiene todos los datos a partir desde el id que le indiques, por ejemplo select top(10) * from tabla obtiene los primeros 10 registros pero como obtener los primeros 10 registros a partir del registro 500?

Una de las muchas soluciones es hacer un select * y luego cortar con betwen, el problema es que el motor sql va a obtener los 5 mil millones de registros y luego los cortará y eso multiplicado por la cantidad de solicitudes por segundo es un desastre.

Lo que un amigo me recomendó es mandar toda la base de datos a la memoria del servidor a traves de un grid en .net, el problema es el mismo, si tengo 5 mil millones de registros que se van a ir a memoria eso significa que voy a desperdiciar recursos cuando los datos aumenten y tenga mas sistemas que hagan lo mismo y peor aun cuando se actualice algún dato, tendría que volver a volcar todos los datos a la memoria y es una locura.

Esta es la mejor solución que he encontrado dando vueltas por ahi:
Código:
select * 
from (
    select *, ROW_NUMBER() over (order by id desc) AS idColumna
    FROM datos
) as buffer
where buffer.idColumna between 2 and 15

El problema es el mismo, que debe seleccionar los 5 mil millones de registros para poder cortarlos y entregarlos y es toda una locura porque la tabla datos contiene un campo varbinary con varios  megas por cada uno.

Cual sería la solución oficial por parte de microsoft? a caso microsoft nunca utilizó sql server que no se dieron cuenta que hacer un simple paginador era imposible?


Título: Re: Problema paginador en Sql Server 2005
Publicado por: Novlucker en 15 Julio 2013, 17:13 pm
Básicamente el que has puesto ...
http://msdn.microsoft.com/en-us/library/bb445504.aspx

Esto tampoco está mal (similar al primero) ...
http://www.sqlservercentral.com/articles/T-SQL/66030/

Saludos


Título: Re: Problema paginador en Sql Server 2005
Publicado por: WHK en 15 Julio 2013, 17:26 pm
Gracias, me ha servido para saber que traer toda una tabla a la memoria ram para luego cortarla es la solución oficial de Microsoft, ahora cuando colapse el servidor de mi trabajo por uso desmedido de memoria ram sabré a quien hecharle la culpa.