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?