Inicio > Transact-SQL > Paginación Eficiente en SQL Server ROW_NUMBER()

Paginación Eficiente en SQL Server ROW_NUMBER()


Paginación Eficiente en SQL Server

Una paginación eficiente es presentar al usuario final una página en el menor tiempo posible y consumiendo la mínima cantidad posible de recursos.

Consumir el mínimo ancho de banda posible, para ello, cada vez que se solicita una página, sólo debe viajar por la red la página solicitada.

Procesamiento del servidor deberíamos diseñar la paginación de manera que el servidor de base de datos pueda proporcionar la página solicitada con el mínimo consumo de procesador, memoria y acceso a disco. Para ello deberemos crear los índices adecuados y diseñar correctamente la manera de acceder a los datos.

— =============================================
— Para este ejemplo crear un tabla con 2 campos Id_Usuario , Nombre
— la tabla la llamaremos PruebaPaginacion
— como parametro le pasaremos el numero de la pagina , el numero de registros de la pagina
— Author:  Ricardo A. Huaman Suarez
— Create date: 06/11/2009
— Descripcion: Paginación con sql server
— spPruebaPaginacion 1,50
— =============================================

CREATE PROCEDURE [dbo].[spPruebaPaginacion]
@Pagina Int,
@RegistrosporPagina Int,

AS

BEGIN
— SET NOCOUNT ON Evita que se devuelva el mensaje que muestra el recuento del número de filas afectadas por una instrucción
SET NOCOUNT ON;

SELECT * FROM (
SELECT ROW_NUMBER()Over(Order by dbo.PruebaPaginacion.Nombre Asc) As RowNum, dbo.PruebaPaginacion.Id_Usuario ,
dbo.PruebaPaginacion.Nombre
FROM dbo.PruebaPaginacion
)
AS ResultadoPaginado
WHERE RowNum BETWEEN (@Pagina – 1) * @RegistrosporPagina + 1 AND @Pagina * @RegistrosporPagina

END

Categorías:Transact-SQL
  1. Dragneel
    14 octubre 2011 a las 3:46 pm

    gracias! me fue muy útil!!

  2. Chars
    1 marzo 2012 a las 12:23 am

    Amigo, una pregunta:
    Si para obtener el total de registros uso la siguiente consulta:
    Select identificacion, apellido From tbl_doce_curso Group By identificacion, apellido

    ¿Como resulta la consulta para paginación?
    Select identificacion, apellido From ( Select *, ROW_NUMBER() OVER (ORDER BY num_identificacion) as row From tbl_doce_curso ) as alias WHERE row > $limitMin and row <= $limitMax Group By identificacion, apellido
    Así lo intente pero no saca todos los registros que se obtiene de la primera consulta.

    ¿Alguna sugerencia?

    Gracias por la atención.

  3. Víctor
    8 marzo 2012 a las 7:17 pm

    Gracias por compartir, sencillo pero muy útil

  4. Adrian
    9 marzo 2012 a las 2:13 pm

    Funciona, pero al tener muchos datos en la tabla, se hace un select y se devuelven todas las tuplas, luego se hace el where del rownumber. En un sistema en produccion con muchisimos datos se hace bastante lento, casi de igual manera de enviar todo el select sin el paginado

    • 5 abril 2013 a las 9:47 pm

      Es que tienes que ver cuando usar esto, en un tabla de 10’000,000 de registros no es muy recomendable hacer esto.

  5. 21 septiembre 2012 a las 8:23 pm

    Hola muy buena la información, me sirvio bastante pero como se puede contar los resultados totales ? ya que solo me retorna el valor de RegistrosporPagina al hacer un sqlsrv_num_rows, muchas gracias.

  6. 23 octubre 2012 a las 7:53 pm

    Disculpa necesito tu ayuda me dicde que las hay que declarar antes las variables pagina y registroporpagina
    en esta linea:
    WHERE RowNum BETWEEN (@Pagina – 1) * @RegistrosporPagina + 1 AND @Pagina * @RegistrosporPagina

  7. dani
    24 octubre 2012 a las 2:36 pm

    TREMENDAMENTEG GRACIAS

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: