2010-11-29 16 views
6

Puede ser una pregunta frecuente, sin embargo, hasta ahora no he podido encontrar una respuesta convincente.¿Cuál es la mejor práctica de clasificar datos con paginación, nivel comercial o nivel de base de datos?

En mi proyecto, necesito buscar paginación para un conjunto de más de 20,000 registros que es un resultado conjunto de varias tablas, y debe ordenarse de manera diferente en diferentes escenarios.

Actualmente, hay 2 opciones frente a mí:

1, lo hacen mediante el uso de procedimiento de almacenamiento en la base de datos de nivel ie. where dl.[row_number] between @index*@size+1 and @index*@[email protected]. El problema de hacerlo es que tendrá que escribir Store Procs para cada clasificación por separado.

2, hágalo en el nivel de lógica de negocios, y realice paginación y clasificación por encima del resultado. (ie. skip(), take()) Pero tampoco es ideal, ya que puede terminar recuperando 20,000 registros, pero solo se usan 10 de ellos

¿Hay alguna mejor práctica estándar disponible para esto? gracias de antemano

+1

No tiene que hacer un procedimiento almacenado por separado para cada "cláusula where" porque puede hacer cosas como sentencias case y o. – jcolebrand

Respuesta

3

mantener esta lógica en la capa de la base de datos.

si se utiliza el procedimiento almacenado y, a continuación, ampliarse para incluir también la columna de ordenación (s) para que pueda volver al derecho establecido

0

Si se trata de una aplicación multiusuario, no habrá problemas de escalabilidad a menos que recoger el resultado para una sola página de visualización y confirmar la transacción.

Por ejemplo, una pantalla paginada en un sitio web debe realizar una nueva consulta cada vez que el usuario navega a la página siguiente. La alternativa es mantener el resultado completo de 20K en el contexto de la sesión web, que no se escalará bien.

Existe una ligera molestia con el lenguaje SQL para la clasificación, ya que el nombre de la columna (o el índice de la columna) para la clasificación no se puede parametrizar.

Cuestiones relacionadas