La consulta de paginación es un problema que se encuentra con frecuencia. Primero veamos la razón por la cual existe la consulta de paginación:
Conveniencia del usuario: es imposible para los usuarios ver todos los datos a la vez, por lo que es mejor navegar página por página.
Mejorar el rendimiento: recuperar todos los datos de la base de datos a la vez será más lento.
Ahora permítanme intentar refutar las razones anteriores:
¿es realmente conveniente? Consideramos la siguiente situación si solo hay 20 datos.
Si los datos superan los 1000 artículos.
El primer tipo obviamente no requiere consultas de paginación. Lo extraño es que el segundo no es necesario, porque ningún usuario está dispuesto a pasar página por página hasta el final. Si los datos que el usuario consulta exceden el rango de datos que le interesa, creo que se le debería permitir volver a ingresar. las condiciones de consulta, como nosotros. Igual que usar google.
Pero como interfaz de aplicación amigable, siempre esperamos que el usuario pueda comprender completamente los resultados de su consulta, por lo que es necesario decirle al usuario: "¿Cuántos datos ha encontrado? Sin embargo, actualmente solo se pueden mostrar los primeros 1000 elementos. Si desea ver todos los datos, entonces, ¿qué se debe hacer...?
¿Mejorará el rendimiento?
Si la cantidad de datos es pequeña, obviamente el rendimiento no mejorará significativamente. Al contrario, el rendimiento se reducirá considerablemente. Porque la base de datos realiza consultas y condiciones de consulta innecesarias.
Si la cantidad de datos es grande, es posible que el rendimiento no mejore significativamente, porque siempre debe ejecutar una consulta de recuento adicional y, al combinar SQL, es muy probable que provoque un escaneo completo de la tabla. Por supuesto, esto depende del principio de implementación de la base de datos.
Se puede imaginar que la relación entre el impacto de las consultas de paginación en el rendimiento y la cantidad de datos debería ser una curva. Cuando la cantidad de datos es pequeña, el rendimiento se reducirá y cuando la cantidad de datos es grande, el rendimiento se reducirá. puede (dependiendo de las diferentes bases de datos) mejorarse. La clave es encontrar el punto de inflexión de la curva mediante pruebas. El rendimiento no se obtiene según la experiencia y el sentimiento, sino mediante pruebas. Además, si se extraen todos los datos a la vez, afectará el rendimiento del espacio. Sin embargo, la memoria es muy barata ahora.
Impacto negativo Para una aplicación web bien diseñada, es realmente incómodo pasar pageNo y PageSize entre varias clases. Estos dos datos obviamente pertenecen a la capa de presentación. Por supuesto, si usas RoR, no lo he mencionado.
Aumenta significativamente la complejidad de la programación, especialmente cuando se considera la independencia de la base de datos.
Fenómeno extraño: ¿por qué una base de datos grande no proporciona directamente consultas de paginación? RowNo de Oracle no se utiliza para paginación, ni Top de SQLServer.
en conclusión
ExtremeTable, DisplayTag y JSF DataTable proporcionan métodos de paginación simples, es decir, paginación en la colección de resultados. Es muy cómodo de usar y deja la lógica clara, lo que mejora enormemente la eficiencia del trabajo. En la mayoría de los casos, este método se puede utilizar directamente.
Si al realizar pruebas descubre que el método anterior afecta el rendimiento, considere utilizar consultas de paginación.
Para aplicaciones con una gran cantidad de usuarios, también se pueden considerar consultas de paginación debido a limitaciones de memoria. Sin embargo, personalmente recomiendo el método de almacenamiento en caché: la misma consulta se coloca en un caché...
Utilice un diseño razonable para evitar que los desarrolladores tengan que lidiar con la lógica de paginación. Por ejemplo, la lógica de paginación y la consulta de recuento se colocan en la clase principal y el desarrollador es responsable de combinar las condiciones de la consulta. Veamos específicamente los patrones de diseño.
¡Todos son bienvenidos a discutir! ! !